Java 8'默认'接口 - 我们应该有循环默认实现吗?

时间:2017-01-29 17:01:46

标签: java interface

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

0 个答案:

没有答案