我有一些代码需要动态生成一个通用对象,其通用类型为一组子类中的 1 个:例如keyEvent
、mouseEvent
或 appEvent
,这些都扩展了 event
。因此,我的通用类 EventFunction
需要一个模板,但是在收到事件之前我不知道类类型是什么,所以有没有办法执行以下操作:
Event event = new KeyEvent(); // FOR EXAMPLE RECIEVING A KEY EVENT
// Require an EventFunction with that event class as the generic type
EventFunction<event.getClass()> func = new EventFunction<event.getClass()>(event);
如何执行上述操作:即动态指定通用值?
最佳答案
以下代码片段可能会对您有所帮助:
class Event { }
class FooEvent extends Event { }
class EventFunction<T extends Event> {
public EventFunction(T event) { }
}
class EventFunctionFactory {
public <T extends Event> EventFunction<T> buildFunction(T event) {
if (event.getClass().equals(FooEvent.class)) {
System.out.println("A new FooEventFunction!");
return new EventFunction<T>(event);
}
else {
return null;
}
}
}
使用方法如下:
EventFunctionFactory factory = new EventFunctionFactory();
Event foo = new FooEvent();
EventFunction<Event> function = factory.buildFunction(foo);
这里有一个片段
关于java - 当类型仅在运行时已知时如何指定泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54057016/