Usage of generics in interface

Luc*_*uke 3 java generics

我有一个关于接口中正确方法签名的问题,以及为什么。我的事件是用一个类型参数化的,但是接口也应该有一个<T>在方法签名中使用它的吗?如果是为什么,为什么不呢?

public interface MyListener {
    void beforeAction(final MyEvent event);
}
Run Code Online (Sandbox Code Playgroud)

public class MyEvent<T> extends EventObject {

    // code
}
Run Code Online (Sandbox Code Playgroud)

And*_*Mao 5

如果MyEvent使用类型参数化,则MyListener需要指定为

public interface MyListener<T> {
    void beforeAction(final MyEvent<T> event);
}
Run Code Online (Sandbox Code Playgroud)

或者,如果有不同类型的MyEvents不是特定于封闭的MyListener,则:

public interface MyListener {
    <T> void beforeAction(final MyEvent<T> event);
}
Run Code Online (Sandbox Code Playgroud)

或者,正如 Thomas 所说,您可以完全忽略 T 的类型:

public interface MyListener {
    void beforeAction(final MyEvent<?> event);
}
Run Code Online (Sandbox Code Playgroud)

您必须执行上述操作之一,否则您将收到有关使用原始类型的编译器警告。