ホームページ >Java >&#&チュートリアル >Java ソートのラムダ式で「Comparator.reversed()」が失敗するのはなぜですか?

Java ソートのラムダ式で「Comparator.reversed()」が失敗するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-03 21:38:12493ブラウズ

Why Does `Comparator.reversed()` Fail with Lambda Expressions in Java Sorting?

Lambda で Comparator.reversed() が失敗する理由

ラムダ式と Comparator.comparing を使用して User オブジェクトのリストを並べ替える場合、エラーが発生する可能性があります:

userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error

これは制限によるものですコンパイラの型推論メカニズム内。コンパイラは、ラムダ引数 'u' の型を判断するのに苦労します。

次の例では、メソッド参照を使用することで、コンパイラがターゲットの型を推測してエラーを回避できます。

userList.sort(Comparator.comparing(User::getName).reversed()); // works

メソッド参照は、コンパイラが User として 'u' の型を推論するために使用する追加の型情報を提供します。

次の場合のエラーを回避するにはラムダを使用すると、ラムダ引数の型を明示的に指定できます。

userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());

将来のコンパイラ リリースでは、この問題は解決され、エラーは発生しなくなる可能性があります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。