我正在学习java泛型,并尝试为事件实现它 在有人询问之前,我已经考虑过使用多态,但是因为我希望每个事件都向处理程序的start方法发送不同的值,所以我不能这样做。
这是我的事件处理程序:
public class MyHandler {
public void startEventAction(int num) {
//do something with num
}
}
这是我的模板事件:
public abstract class SomeEvent<E> {
protected List<E> handler_list = new LinkedList<E>();
public SomeEvent() {
}
public Boolean addHandler(E handler) {
return handler_list.add(handler);
}
public Boolean removeHandler(E handler) {
return handler_list.remove(handler);
}
}
并且事件本身是:(现在我知道像这样扩展SomeEvent可能是错误的,但似乎有效)
public class MyEvent<MyHandler> extends SomeEvent<MyHandler> {
public void executeHandlers() {
for (MyHandler handler : handler_list) {
//Exception here!!
handler.startEventAction(num);
}
}
}
我的问题是如何扩展它以及为什么最后一个代码块中的MyHandler函数startEventAction不存在(对于MyEvent) 答案将非常感谢。
答案 0 :(得分:2)
我认为应该是
public class MyEvent<T extends MyHandler> extends SomeEvent<T> {
public void executeHandlers() {
for (T handler : handler_list) {
//Exception here!!
handler.startEventAction(lvc_count);
}
}
如果使用MyEvent<MyHandler>
,则将MyHandler
视为类型参数,而不是类型参数。这就是为什么我通常宁愿使用字母作为类型参数而不是整个单词,这避免了它们与类和接口名称之间的混淆。
答案 1 :(得分:0)
只需更改MyEvent
类声明:
public static class MyEvent extends SomeEvent<MyHandler> { ... }
它应该没问题。