通用类型Java中的接口

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

Luc*_*oss 3

&在该上下文中表示类型的交集。假设你有这样的课程:

interface SomeInterface
{
  public boolean isOkay();
}

enum EnumOne implements SomeInterface { ... }

enum EnumTwo implements SomeInterface { ... }
Run Code Online (Sandbox Code Playgroud)

您希望能够使用任何实现 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) { ... }
  }
}
Run Code Online (Sandbox Code Playgroud)

请参阅http://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#4.9