【问题标题】:Lambda AbstractMethodError with generics in a library库中带有泛型的 Lambda AbstractMethodError
【发布时间】: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 类移动到库模块,您应该能够复制该问题。

标签: android lambda javadoc


【解决方案1】:

Android Studio 3.2 修复了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多