2

私のプロジェクトでは、コードの互換性をバイパスするために、 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 )。INamedRoomAItemContainerANamedINamed

だから、何が問題になるのか、よくわかりません。RetrolambdaプラグインはJava 8とまったく同じようには機能しないと思いますが、何をどのように変更すればよいかわかりません...また、問題は完全に別の場所にある可能性があります。私は Android から始めたばかりです...

必要に応じてさらにコードを提供できますが、重要なことはすべて説明されていると思います。助けてくれてありがとう。

4

1 に答える 1