use*_*884 8 java generics interface java-8
今天我在jdk8源代码中发现了奇怪的代码,无法找到任何解释.
static final Comparator<ChronoLocalDate> DATE_ORDER =
(Comparator<ChronoLocalDate> & Serializable) (date1, date2) -> {
return Long.compare(date1.toEpochDay(), date2.toEpochDay());
};
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么和Serializable出<>?
提供文档链接会很棒.
链接到源:AbstractChronology
&在该上下文中表示类型的交集。假设你有这样的课程:
interface SomeInterface
{
public boolean isOkay();
}
enum EnumOne implements SomeInterface { ... }
enum EnumTwo implements SomeInterface { ... }
Run Code Online (Sandbox Code Playgroud)
您希望能够使用任何实现 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) { ... }
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅http://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#4.9