我有以下類:如何獲得Comparator.comparing正確推斷類型參數?
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
public class Sorter {
private List<Pair<Long, NameDTO>> dtoPairs = new ArrayList<>();
public Sorter() {
Comparator<Pair<Long, NameDTO>> bySize = Comparator.comparing(Pair::getLeft);
Comparator<Pair<Long, NameDTO>> byName = Comparator.comparing(p -> p.getRight().getName());
dtoPairs.sort(bySize.reversed().thenComparing(byName));
}
}
class NameDTO {
private String name;
public String getName() {
return name;
}
}
這將編譯沒有問題。但是,如果我嘗試內聯變量是這樣的:
dtoPairs.sort(Comparator.comparing(Pair::getLeft).reversed().thenComparing(Comparator.comparing(p -> p.getRight().getName())));
我得到以下編譯錯誤:
Sorter.java:[18,51] incompatible types: cannot infer type-variable(s) T,U
(argument mismatch; invalid method reference
method getLeft in class org.apache.commons.lang3.tuple.Pair<L,R> cannot be applied to given types
required: no arguments
found: java.lang.Object
reason: actual and formal argument lists differ in length)
我怎麼能寫這樣的表達使Java正確理解的參數?
的[對比和thenComparing給出編譯錯誤]可能的複製(http://stackoverflow.com/questions/40500280/comparing-and-thencomparing-gives-compile-error) –
@ OleV.V:我不知道認爲這是重複的,它沒有泛泛的方法參考,這是什麼扔我在這裏。 – Keppil