java - 我如何知道实例何时创建?
问题描述
所以我做了一个简单的程序,允许你创建大量类的实例。现在我负责将创建的实例发送到服务器。我真的很喜欢类构造函数,所以我真的不想改变它们。我怎么能听这个程序,这样我就可以知道最近创建了哪些类,我正在考虑使用反射和线程?
这是我想要完成的一个简短示例:
public class MainApplicaton{
public static void main(String []args){
ConnectServer.listenToCreatedInstances().
new Vase();
new Dog();
new House();
}
}
package stuff.components;
public class Human{
public Human(){
}
}
package stuff.components;
public class Dog{
public Dog(){
}
}
package stuff.components;
public class House{
public House(){
}
}
现在我的听众线程:
public enum ConnectServer {
Server;
public void listenTocreatedIntances(){
//Something happens here
Class c ..
System.out.println("A instance of "+c.getName());
}
}
解决方案
实现这一点的一个相对简单的方法是引入一个公共父类,并使用父类构造函数来生成事件。子类构造函数总是调用父类构造函数。
package stuff.components;
class Component {
public Component() {
ConnectServer.Server.onInstanceCreated(this.getClass());
}
}
class Human extends Component {
public Human(){
// implicit call to Component constructor
}
}
class Dog extends Component{
public Dog(){
// implicit call to Component constructor
}
}
如果您想在不修改任何代码的情况下从实例创建中获取事件,那么您必须比 Java 看得更远。您的选择包括:
- 面向方面的编程,例如 aspectj:它允许您在程序中发生特定事情时注入代码(例如构造函数调用)
- 在运行时使用字节码操作库(如 ASM)将代码注入子类构造函数
推荐阅读
- python - Python转换两个不同坐标平面之间的角度?
- javascript - TypeError:find_element_by_xpath() 得到了一个意外的关键字参数“onclick”
- if-statement - 如何在JMeter中使用if控制器检查文件名
- node.js - 有没有办法在 nodejs 应用程序中使用全局类似值?
- python - 如何在 Django Admin 中显示没有标签的 ReadOnlyFields?
- nuxt.js - Nuxt Project 404 页面刷新网页
- sql - 如何根据其他表中没有公共字段的信息进行计算?
- angular - --output-hashing=all 在角度构建中有什么用?
- python - 同时将更改的计数器 int 变量发送到另一个 python 脚本
- python - 错误:数组的最后 2 个维度必须是正方形