我有一个处理程序的通用接口:
public interface EventHandler<T> {
boolean handleEvent(T message);
}
你可以实现这个接口和过程T message
。您必须将实现的实例传递给EventDispatcher
实例。该类在内部存储EventHandler
各种类型的多个实例。
在某个时刻,一个事件被触发,EventDispatcher
实例调用相应EventHandler
的 'shandleEvent()
方法并传递一个与 .s 相同类型的消息EventHandler
。问题是我不知道哪个是确切的类型,但我确信T message
我传递给EventHandler
实例具有相同的“T”。
我进行此调用的方式使用原始类型并且有效:
EventHandler handler = getHandler();
Object message = getMessage();
handler.handleEvent(message);
,但我收到警告“未经检查地调用 'handleEvent(T)' 作为原始类型 'EventHandler' 的成员”。
是否可以使用泛型来避免警告?
我想到的一种可能的解决方案是制作一个通用的包装方法:
private <T> boolean handleEventGeneric(EventHandler<T> handler, T message) {
return handler.handleEvent(message);
}
并使用它:
EventHandler handler = getHandler();
Object message = getMessage();
handleEventGeneric(action.eventHandler, message);
但我不喜欢我必须制作一个包装方法的事实。有没有更优雅的解决方案?