首页 > 解决方案 > 我如何知道实例何时创建?

问题描述

所以我做了一个简单的程序,允许你创建大量类的实例。现在我负责将创建的实例发送到服务器。我真的很喜欢类构造函数,所以我真的不想改变它们。我怎么能听这个程序,这样我就可以知道最近创建了哪些类,我正在考虑使用反射和线程?

这是我想要完成的一个简短示例:

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());
        }
    }

标签: javareflection

解决方案


实现这一点的一个相对简单的方法是引入一个公共父类,并使用父类构造函数来生成事件。子类构造函数总是调用父类构造函数。

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)将代码注入子类构造函数

推荐阅读