私のプロジェクトでは、コードの互換性をバイパスするために、 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
実装します ( extendsその extendsその implement )。INamed
Room
AItemContainer
ANamed
INamed
だから、何が問題になるのか、よくわかりません。RetrolambdaプラグインはJava 8とまったく同じようには機能しないと思いますが、何をどのように変更すればよいかわかりません...また、問題は完全に別の場所にある可能性があります。私は Android から始めたばかりです...
必要に応じてさらにコードを提供できますが、重要なことはすべて説明されていると思います。助けてくれてありがとう。