ホームページ > Java > &#&チュートリアル > Java ラムダ式で「Comparator.reversed()」がコンパイル エラーを引き起こすのはなぜですか?

Java ラムダ式で「Comparator.reversed()」がコンパイル エラーを引き起こすのはなぜですか?

Susan Sarandon
リリース: 2024-12-15 06:22:11
オリジナル
193 人が閲覧しました

Why Does `Comparator.reversed()` Cause Compilation Errors with Java Lambda Expressions?

コンパイラの落とし穴: Comparator.reversed() とラムダ式

ラムダ式は並べ替え動作をカスタマイズする簡潔な方法を提供しますが、 Comparator.reversed() を実行するとコンパイルエラーが発生します。このエラーは、コンパイラがラムダの正しいターゲット型を推論できないことが原因で発生します。

エラーについて

次のサンプル コードを検討してください:

userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
ログイン後にコピー

この場合、コンパイラがラムダ内のパラメータ u の型を判断できないためにエラーが発生します。 表現。型を推論するには、コンパイラにはラムダのターゲット型が必要です。

通常、ターゲット型はラムダが使用されるコンテキストによって確立されます。指定したコード スニペットの最初の行では、 userList.sort() がその型の引数を期待しているため、ターゲットの型は Comparator です。これにより、u が User 型であることが推測され、コードをコンパイルできるようになります。

ラムダとメソッドのリファレンス

エラーは、ラムダ式を使用する場合にのみ発生します。メソッド参照を使用する場合 (コード スニペットの 2 行目など)、ターゲットの型はメソッド シグネチャによって明示的に提供され、型推論の問題が解決されます。

エラーの解決

ラムダ式を使用する際のエラーを解決するには、パラメータを明示的に指定します。 type:

userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());
ログイン後にコピー

これにより、u が User 型であることが明示的に指定され、コンパイラがターゲットの型を正しく推論できるようになります。

コンパイラの弱点

問題のエラーは、コンパイラの型推論メカニズムの弱点を浮き彫りにしています。 reversed() メソッドがターゲットの入力を妨げる正確な理由は不明です。将来のコンパイラの機能拡張では、この問題が解決され、明示的なパラメータの入力なしでラムダ式を使用できるようになる可能性があります。

以上がJava ラムダ式で「Comparator.reversed()」がコンパイル エラーを引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート