我有两个类Event1
和Event2
。在运行时,我想使用Java反射创建Event1
或Event2
的实例,并将其作为参数传递给另一个函数。该函数是一个多态函数,根据输入参数的类型,它调用相应的功能。
由于我不知道在运行时可能需要创建哪种子事件实例,因此我从'Event'类扩展了这两个子类并创建了父类实例。我的问题是,是否可以将'Event'类的实例作为参数传递,它将在运行时解析为多态函数的子类之一。
这是我的代码。
public void myFunc(){
String qualifiedName = new String("events.Event1"); // Event1 info is actually obtained at runtime.
Class cls = Class.forName(qualifiedName);
Event baseEvent = (Event) cls.getDeclaredConstructor().newInstance();
// I want to create an instance like, Event ev1 = new Event1(); and pass it as a parameter.
observer.update(baseEvent); // I get compile time error because no update method takes `Event` class instance as parameter.
}
包含多态函数的Observer类。
public void update(Event1);
public void update(Event2);
Java泛型可以在这里提供帮助吗?谢谢。
最佳答案
尝试这个:
Method method = observer.getClass().getDeclaredMethod("update", baseEvent.getClass());
method.invoke(observer, baseEvent);