交叉点类型的成员

时间:2014-07-11 11:23:38

标签: java intersection jls

此问题与:Lambda Intersection Type Question

有关

请参阅示例:

public class X {
  Object o = (I & J) () -> {};
}
interface I {
   public void foo(); 
}
interface J {
   public void foo();
   public void bar(); 
}

我试图了解交叉点类型的成员。请参阅: JLS

从上一个陈述中不清楚:

  

然后,交集类型与类类型(§8)具有相同的成员,具有空体,直接超类Ck和直接超接口IT1,...,ITn,在交叉类型出现的同一个包中声明。

目前尚不清楚交集类型的成员是否(联合)所有超类Ck和超级接口ITk的所有成员,或者它实际上是supeclass Ck和超级接口ITk的所有成员的交集。

2 个答案:

答案 0 :(得分:3)

类型理论文献中的术语“交集类型”和“联合类型”源于类型的集合论解释,其中String描述了所有可能字符串的(无限)集合。

交叉点类型是两种类型的交集; Comparable & SerializableComparableSerializable的交集组成;它的元素是Comparable和Serializable。

交集类型的成员(例如,方法)看起来就像被交叉类型的成员的联合;这常常使人们误以为他们应该被称为工会类型。

Java没有完整的交集类型;它们只出现在几个地方,例如泛型类型边界和lambda目标类型。

答案 1 :(得分:1)

我理解这是一个联盟,即将该类声明为implements I,J(或使用规范:class IntersectionType extends Ck implements IT1, IT2, ... ITn)。