簡體   English   中英

泛型Java接口

[英]Interface in generic type Java

今天,我在jdk8源代碼中發現了奇怪的代碼,找不到任何解釋。

 static final Comparator<ChronoLocalDate> DATE_ORDER =
    (Comparator<ChronoLocalDate> & Serializable) (date1, date2) -> {
        return Long.compare(date1.toEpochDay(), date2.toEpochDay());
    };

誰能解釋我為什么&可Serializable<>嗎?
而且,提供文檔鏈接也很棒。

鏈接到源: AbstractChronology

在這種情況下, &表示類型的交集。 假設您有類似的課程:

interface SomeInterface
{
  public boolean isOkay();
}

enum EnumOne implements SomeInterface { ... }

enum EnumTwo implements SomeInterface { ... }

您希望能夠使用任何將SomeInterface實現為通用類型中的類型參數的枚舉。 當然,您希望能夠同時在Enum和SomeInterface上使用方法,例如compareToisOkay 這是可以做到的:

class SomeContainer<E extends Enum<E> & SomeInterface>
{
  SomeContainer(E e1, E e2)
  {
    boolean okay = e1.isOkay() && e2.isOkay();
    if (e1.compareTo(e2) != 0) { ... }
  }
}

參見http://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#4.9

您的問題分為兩部分:

什么是& Serializable

這是類型的交集-類型必須同時為 Comparator<ChronoLocalDate> Serializable

為什么不在尖括號< >

因為它是強制類型轉換,而不是通用參數類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM