今天我在jdk8源代码中发现了奇怪的代码,无法找到任何解释。
static final Comparator<ChronoLocalDate> DATE_ORDER =
(Comparator<ChronoLocalDate> & Serializable) (date1, date2) -> {
return Long.compare(date1.toEpochDay(), date2.toEpochDay());
};
任何人都可以解释为什么&amp; Serializable
中的<>
?
提供文档链接会很棒。
链接到来源:AbstractChronology
答案 0 :(得分:3)
&
表示类型的交集。假设你有这样的课程:
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
答案 1 :(得分:1)
您的问题分为两部分:
什么是
& Serializable
?
这是类型的交集 - 类型必须 Comparator<ChronoLocalDate>
和 Serializable
为什么它不在尖括号
中< >
?
因为它是一个演员,而不是一般参数类型