在我的项目中,我尝试使用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
AItemContainer
ANamed
INamed
所以我真的不明白,这会是什么问题。我怀疑Retrolambda插件与 Java 8 的工作方式不完全相同,但无法说出要更改的内容以及如何更改...而且问题可能完全出在其他地方,我只是从 Android 开始...
如果需要,我可以提供更多代码,但我认为所有重要的事情都已被告知。提前感谢您的帮助。