【发布时间】:2017-11-06 14:52:08
【问题描述】:
我有一个 使用 Java 8 的 android 库,并且有一个默认接口来作为其他接口的基础。像这样的:
interface GenericListener<T extends Event>
{
void onEvent(T event);
}
interface MyEventListener extends GenericListener<MyEvent>
{
class MyEvent extends Event
{
...
}
/**
* Some javadoc explanation for this method
*/
void onEvent(MyEvent event);
}
// Elsewhere in the library, there's one method to post all events to their
// listeners
void postEvent(GenericListener listener, Event event)
{
listener.onEvent(event);
}
因此,至少在引入 lambda 之前,上述内容完全按照应有的方式工作。如果有人在他们的应用程序中将 MyEventListener 实现为 lambda,那么当调用 postEvent() 时,它会抛出 AbstractMethodError。如果我从 MyEventListener 中删除 onEvent() 方法,那么它工作正常。理想情况下,我想在扩展接口中实现 onEvent() 方法,以便我可以为扩展 GenericListener 的每个接口以不同的方式为该方法注入 javadoc。
我应该注意,如果将 MyEventListener 接口与应用程序放在同一个模块中,那么一切正常。
【问题讨论】:
-
无法用给定的代码重现。请提供一个完整的(非)工作示例
-
你在安卓上试过了吗?
-
是的,使用 android studio 模拟器
-
有趣,刚刚运行了一个快速测试,它成功了。我想知道它是否与已经编译的库有关。
-
好的,在摆弄之后,似乎接口必须位于与使用 lambda 的模块不同的模块中。如果将 Listener 和 MyListener 类移动到库模块,您应该能够复制该问题。