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
是一个立即的超级接口,而不是立即的超类。或者可以说更好,特别是现在我们没有interface
interface
,将
IEvent
作为一个抽象类

还是那么脆弱。例如,只检查立即数类型。同时检查运行时类型也是一个糟糕的主意


最好不要将
IEvent
直接放入
Deque
。正确地将
IKeyDownEvent
包装在处理
KeyDownEventPayload
的类中,对于其他类型也是如此。

“具体接口”——抱歉,没有这样的东西。接口不能是“具体的”。你有没有考虑过
instanceof
?@JimGarrison似乎很明显,OP指的是一个非抽象接口。“非抽象接口”——也不是这样的东西。你是说“非通用”吗?哦,我的话。很明显,我指的是一个非抽象的接口。我猜“具体接口”=具有具体泛型类型的接口。
if (payload.getClass() == ev.getClass().getGenericSuperclass())
    ev.handleEvent(payload);