我需要一些代码来动态生成一组子类的泛型类型为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);
如何执行以上操作:即即时指定通用值?在此先感谢!
答案 0 :(得分:1)
以下代码段可能会对您有所帮助:
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);
这里有一个片段
答案 1 :(得分:0)
仅泛型供编译器在编译时检查类型安全。如果您的类型参数仅在运行时才知道,而在编译时才知道,那么就没有必要使用泛型了。