因此,我制作了一个简单的程序,使您可以创建大量类的实例。 现在,我负责将创建的实例发送到服务器。我真的很喜欢类的构造函数,所以我真的不想更改它们。 我该如何听这个程序,以便知道最近创建了哪些类,我在考虑使用反射和线程?
这是我想要完成的简短示例:
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());
}
}
答案 0 :(得分:1)
一个相对简单的方法是引入一个公共的父类,并使用父类的构造函数来生成事件。子类构造函数始终调用父类构造函数。
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更进一步。您的选择包括:
答案 1 :(得分:0)
回答这个问题的另一种方法是使用FactoryPattern。每次注册对象时,我们都会通知单例。
public class MainApplicaton{
public static void main(String []args){
Vase vase = new Vase();
Dog dog = new Dog();
House house = new House();
ConnectServer.listenToCreatedInstances(vase);
ConnectServer.listenToCreatedInstances(dog);
ConnectServer.listenToCreatedInstances(house);
}
}
在此Singleton中,我们将接收创建的元素并应用所需的行为。
public enum ConnectServer {
Server;
public void listenTocreatedIntances(Component component){
//Something happens here
System.out.println("A instance of "+component.getClass().getName());
}
}