我有两个类Event1Event2。在运行时,我想使用Java反射创建Event1Event2的实例,并将其作为参数传递给另一个函数。该函数是一个多态函数,根据输入参数的类型,它调用相应的功能。

由于我不知道在运行时可能需要创建哪种子事件实例,因此我从'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);

09-27 12:17