Java中通用接口的类型检查
我有一个界面事件,如下所示:Java中通用接口的类型检查,java,generics,Java,Generics,我有一个界面事件,如下所示: public abstract interface IEvent<T> { public abstract void handleEvent(T payload); } public interface IKeyDownEvent extends IEvent<KeyDownEventPayload> {} public interface IKeyUpEvent extends IEvent<KeyUpEventPayloa
public abstract interface IEvent<T> {
public abstract void handleEvent(T payload);
}
public interface IKeyDownEvent extends IEvent<KeyDownEventPayload> {}
public interface IKeyUpEvent extends IEvent<KeyUpEventPayload> {}
要真正回答您的问题,请使用
Class.getGenericInterfaces
而不是Class.getGenericSuperclass
作为IEvent
是一个立即的超级接口,而不是立即的超类。或者可以说更好,特别是现在我们没有interfaceinterface
,将IEvent
作为一个抽象类
还是那么脆弱。例如,只检查立即数类型。同时检查运行时类型也是一个糟糕的主意
最好不要将
IEvent
直接放入Deque
。正确地将IKeyDownEvent
包装在处理KeyDownEventPayload
的类中,对于其他类型也是如此。“具体接口”——抱歉,没有这样的东西。接口不能是“具体的”。你有没有考虑过instanceof
?@JimGarrison似乎很明显,OP指的是一个非抽象接口。“非抽象接口”——也不是这样的东西。你是说“非通用”吗?哦,我的话。很明显,我指的是一个非抽象的接口。我猜“具体接口”=具有具体泛型类型的接口。
if (payload.getClass() == ev.getClass().getGenericSuperclass())
ev.handleEvent(payload);