最近在讀lambda表達式相關的java源碼,在Comparator的靜態方法裡發現有不少這種類似的寫法
java.util.Comparator
...
public static <T> Comparator<T> comparingInt(ToIntFunction<? super T> keyExtractor) {
Objects.requireNonNull(keyExtractor);
return (Comparator<T> & Serializable)
(c1, c2) -> Integer.compare(keyExtractor.applyAsInt(c1), keyExtractor.applyAsInt(c2));
}
其中return (Comparator<T> & Serializable)
應該是表示型別強轉,但是這裡為什麼不直接轉換成Comparator<T>
,而要用邏輯與符號?
這個表示強轉成
Comparator<T>
和Serializable
可以看下這個解釋