2017-01-06 34 views
3

從JDK8的Comparator.java爲什麼Java 8的Comparator.comparing()將返回值轉換爲Serializable?

public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
     Function<? super T, ? extends U> keyExtractor) 
{ 
    Objects.requireNonNull(keyExtractor); 
    return (Comparator<T> & Serializable) 
     (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2)); 
} 

通知return語句前面加上一個有趣的投:(Comparator<T> & Serializable)

我已經知道的和(我認爲)理解:

  • &運營商在通用類型的限制(並可以推斷其目的在這裏),
  • Serializable接口。

然而,中投一起使用,莫名其妙給我。

什麼是& Serializable目的如果返回類型並不需要它?

我不明白意圖。

後續欺騙/關閉請求:這個問題How to serialize a lambda?不回答問題。我的問題特別指出返回類型沒有提及Serializable,因此我的困惑的來源。

+0

可能重複的[如何序列化lambda?](http://stackoverflow.com/questions/22807912/how-to-serialize-a-lambda) – shmosel

+1

返回類型不是問題。將其轉換爲'Serializable' *使其可序列化*。如果他們選擇這個方法,允許調用者序列化結果。 – shmosel

回答

6

Comparator.comparing()的Javadoc說:

返回的比較器是可序列化如果指定的功能也可序列化。

該轉換可確保Java用來實現lambda的內部類將爲implements Serializable

+0

'Java使用的內部類實現lambda' < - 深! – kevinarpe

相關問題