java - Android:NoSuchMethodError 接口(interface)中有静态方法(使用 Retrolambda)

标签 java android retrolambda

在我的项目中,我尝试在使用 Retrolambda 插件和 Lightweight-Stream-API 的 Android 应用程序中使用 Java 8 编写的代码来绕过代码兼容性。源项目在 Java 平台上运行良好(已澄清)。

将代码移植到 Android 后,我只需要对代码做些微修改(主要是关于获取 com.annimon.stream.Stream 类的实例,因为 Android 中的数组和集合缺少方法 .stream() 所以我需要使用带有数组/集合作为参数的 Stream 类的静态方法),但这甚至不应该成为我的问题。目前没有编译错误,应用程序启动,工作,但在调用时崩溃:

Optional<Room> result = INamed.getO(name, Stream.of(rooms));

出现错误:

FATAL EXCEPTION: main

Process: cz.alois_seckar.vseadventrura, PID: 8109

java.lang.NoSuchMethodError: No static method getO(Ljava/lang/String;Lcom/annimon/stream/Stream;)Lcom/annimon/stream/Optional; in class Lcz/alois_seckar/vseadventrura/eu/pedu/adv16s_fw/game_txt/INamed; or its super classes (declaration of 'cz.alois_seckar.vseadventrura.eu.pedu.adv16s_fw.game_txt.INamed' appears in /data/data/cz.alois_seckar.vseadventrura/files/instant-run/dex/slice-slice_1-classes.dex)
    at cz.alois_seckar.vseadventrura.eu.pedu.adv16s_fw.test_util.default_game_txt.game.Apartment.getORoom(Apartment.java:166)
    at cz.alois_seckar.vseadventrura.eu.pedu.adv16s_fw.test_util.default_game_txt.game.Room$$Lambda$1.apply(Unknown Source)
    at com.annimon.stream.Stream$12.nextIteration(Stream.java:539)
    ...

Room 类通过其祖先实现了INamed(Room extends AItemContainerANamed 实现 INamed)。

所以我不太明白,应该是什么问题。我怀疑 Retrolambda 插件不能像 Java 8 一样工作完全一样,但无法说出要更改什么以及如何更改...而且问题可能完全出在其他地方,我是仅从 Android 开始...

如果需要,我可以提供更多代码,但我认为所有重要的事情都已告知。在此先感谢您的帮助。

最佳答案

问题已解决:我发现这是 Retrolambda 的错 - 或者更确切地说是我的错。我忽略了一个事实,我必须在 build.gradle

的 Retrolambda 配置中启用对默认和静态方法的支持

简单的代码如下:

retrolambda {
    defaultMethods true
}

在我这样做之后,Retrolambda 完成了所有后端工作,现在正在寻找方法。

关于java - Android:NoSuchMethodError 接口(interface)中有静态方法(使用 Retrolambda),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36788152/

相关文章:

java - 迭代 linkedBlockingQueue 并同时删除元素

java - 有没有办法在 24 以下的 Android API 上使用 Java 8 功能接口(interface)?

java - 如何不仅从 JTabbedPane 中删除 JPanel,而且还优雅地处置 JPanel 实例?

java - 如何使用 java 8 流过滤具有两个列表的对象?

java - CORS Spring Security 配置 - 404 请求的资源上不存在 'Access-Control-Allow-Origin' header

android - RxJava1 到 Rxjava2 迁移错误

android - CoordinatorLayout 内的 Viewpager 不滚动折叠工具栏

android - 在构建时排除文件夹 Intel XDK

android - 尝试使用 Observable 时获取 Fata 信号 11