此问题与: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的所有成员的交集。
答案 0 :(得分:3)
类型理论文献中的术语“交集类型”和“联合类型”源于类型的集合论解释,其中String
描述了所有可能字符串的(无限)集合。
交叉点类型是两种类型的交集; Comparable & Serializable
由Comparable
和Serializable
的交集组成;它的元素是Comparable和Serializable。
交集类型的成员(例如,方法)看起来就像被交叉类型的成员的联合;这常常使人们误以为他们应该被称为工会类型。
Java没有完整的交集类型;它们只出现在几个地方,例如泛型类型边界和lambda目标类型。
答案 1 :(得分:1)
我理解这是一个联盟,即将该类声明为implements I,J
(或使用规范:class IntersectionType extends Ck implements IT1, IT2, ... ITn
)。