[英]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上使用方法,例如compareTo
和isOkay
。 這是可以做到的:
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.