Java8コンパレータ型推論によって非常に混乱している
特に静的メソッドの使用と、ラムダ式でparamタイプが必要かどうかに関して、Collections.sortとの違いを調べてきました。始める前に、たとえば問題を克服するためにメソッド参照を使用できることはわかっていますが、ここでのクエリは修正したいものではなく、答えが必要なものです。つまり、Javaコンパイラがこのように処理するのはなぜですか。 。list.sortComparatorSong::getTitle これらは私の発見です。我々が持っていると仮定しArrayListたタイプのをSong追加いくつかの曲で、3つの標準getメソッドがあります: ArrayList<Song> playlist1 = new ArrayList<Song>(); //add some new Song objects playlist.addSong( new Song("Only Girl (In The World)", 235, "Rhianna") ); playlist.addSong( new Song("Thinking of Me", 206, "Olly Murs") ); playlist.addSong( new Song("Raise Your Glass", 202,"P!nk") ); これは、機能する両方のタイプのソートメソッドの呼び出しです。問題ありません。 Collections.sort(playlist1, Comparator.comparing(p1 -> p1.getTitle())); playlist1.sort( Comparator.comparing(p1 -> p1.getTitle())); チェーンを開始するとすぐthenComparingに、次のことが起こります。 Collections.sort(playlist1, …