Java 8 コンパレーターの型推論の混乱
Java 8 では、ラムダ式を通じてコンパレーターの使用法が改善されました。ただし、複数の thenComparing 呼び出しを連鎖させると、型推論が不明確になる可能性があります。この問題は、ラムダ式にメソッド レシーバー式としての型推論が欠けているという事実に起因します。
コンパレータ チェーンと型推論
次のコードを考えてみましょう:
Comparator<string> c1 = Comparator.comparing(String::length); Comparator<string> c2 = c1.thenComparing(String::compareToIgnoreCase);</string></string>
最初の行では、型パラメーターのないメソッド参照が使用されており、戻り値の型に基づいて型推論がトリガーされます。文字列::長さ。この型は、thenComparing メソッドで p1 の型を推論するために使用されます。
ただし、次のような状況では、
Collections.sort(list, c1.thenComparing(String::compareToIgnoreCase)); // Error: cannot resolve method
Collections.sort メソッドに特定の型がないため、型の推論は失敗します。 c1の情報。この問題を解決するには、明示的な型パラメータを提供します。
Collections.sort(list, c1.thenComparing(Comparator.comparing(String::compareToIgnoreCase)));
リストとコレクションの並べ替え
List.sort では、型推論が異なる方法で実行されます。
list.sort(Comparator.comparing(String::length).thenComparing(String::compareToIgnoreCase)); // No error
ここでは、Comparator が sort メソッド内で直接作成され、必要な型情報が提供されるため、型推論は必要ありません。ただし、これは最初の thenComparing 呼び出しにのみ当てはまります。明示的な型パラメータを使用しない後続の呼び出しでは、エラーが発生します。
Eclipse 固有のエラー
発生したエラーは Eclipse 固有のものである可能性があることに注意することが重要です。 JDK 8 javac コンパイラーでコードをコンパイルすると、多くの場合、これらの問題が解決されます。
以上が「thenComparing」呼び出しを連鎖するときに Java 8 コンパレーターの型推論が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

メモ帳++7.3.1
使いやすく無料のコードエディター

WebStorm Mac版
便利なJavaScript開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
