我有一个关于接口中正确方法签名的问题,以及为什么。我的事件是用一个类型参数化的,但是接口也应该有一个<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)
如果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)
您必须执行上述操作之一,否则您将收到有关使用原始类型的编译器警告。
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |