ホームページ >Java >&#&チュートリアル >Java の一部のラムダ式で「Comparator.reversed()」がコンパイル エラーを引き起こすのはなぜですか?
Comparator.reversed() ラムダ式との非互換性
ラムダ式と Comparator の reversed() メソッドを使用してリストを並べ替えようとした場合とコンパイルエラーが発生します。この動作を理解するには、コンパイラーの型推論メカニズムの複雑さを詳しく調べることが重要です。
Java コンパイラーは、ラムダ式内の変数の型を、変数が使用されるコンテキストに基づいて決定します。この場合、sort メソッドは Comparator
userList.sort(Comparator.comparing(User::getName).reversed()); // works
ただし、ラムダ式を直接使用すると、コンパイラはラムダ内の変数の型を推測するのに苦労します。ラムダのターゲット タイプは Comparator
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // works
ただし、メソッド参照がない場合、コンパイラはデフォルトで u の型を Object として推論するため、コンパイル エラーが発生します。
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
この問題を解決するには、可能であればメソッド参照を使用するか、ラムダ内でパラメータの型を明示的に指定します。式:
userList.sort(Comparator.comparing((User u) -> u.getName()).reversed()); // works
この制限はイライラするかもしれませんが、これはコンパイラの型推論メカニズムの結果です。将来のコンパイラの機能強化により、この問題が解決される可能性があります。
以上がJava の一部のラムダ式で「Comparator.reversed()」がコンパイル エラーを引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。