首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoSuchMethodError :在界面上使用静态方法(使用Retrolambda)

NoSuchMethodError :在界面上使用静态方法(使用Retrolambda)
EN

Stack Overflow用户
提问于 2016-04-22 07:58:55
回答 1查看 2.3K关注 0票数 2

在我的项目中,我试图使用在安卓应用程序中用Java8编写的代码,使用、Retrolambda、插件和来绕过代码兼容性。源项目在Java平台上运行良好(已澄清)。

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

代码语言:javascript
复制
Optional<Room> result = INamed.getO(name, Stream.of(rooms));

有错误:

代码语言:javascript
复制
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扩展AItemContainer,扩展实现INamedANamed )。

所以我真的不明白,有什么问题吗?我怀疑Retrolambda插件的工作方式与Java 8不完全一样,但无法说明要更改什么以及如何更改.另外,问题可能在别的地方,我只是从Android开始.

如果需要的话,我可以提供更多的代码,但是我认为所有重要的事情都已经被告知了。提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-04-25 07:35:30

问题解决了:,我发现这是Retrolambda的错--或者说是我的错。我忽略了这样一个事实:我必须在build.gradle中支持Retrolambda的配置中的默认和静态方法

简单的代码如下:

代码语言:javascript
复制
retrolambda {
    defaultMethods true
}

在我这么做之后,Retrolambda做了所有的后端工作,现在正在找到这个方法。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36788152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档