Java 8引入了一个名为default methods的新功能,如下所示:
interface A {
default int getInt() {
return 0;
}
}
但是,如果我们添加多个方法:
class Event{...}
class EventA extends Event{...}
class EventAData{}
interface A {
default void handleEvent(Event event) {
if(event instanceof EventA) {
handleData(((EventA) event).getData());
}
}
default void handleData(EventAData data) {
handleEvent(new EventA(data));
}
}
handleEvent()
检查事件是否属于EventA类,默认情况下实现了处理EventA的传统方式。 handleData()
将数据转换为事件,并使用超级新方法handleEvent()
来处理数据。
我看到的问题是,当它们都没有实现时,这两个方法会相互调用,导致堆栈溢出错误。我可能会使用反射来检查调用者是否是默认的handleEvent()
,如果是,则返回。
这样可以吗?如果没有,为什么?
编辑:修正了一个拼写错误,handleEventA
应为handleData