那么,为什么要编译此代码?
public static void main(String[] args) {
Calculator test = (Calculator & Sumator) (a, b) -> a + b;
System.out.println(test.calculate(2, 3));
Sumator sumator = (Calculator & Sumator) (a, b) -> a + b; // does compile, but throws an Exception
sumator.test();
Both both = (Both) (a, b) -> a + b; // does not compile
}
interface Calculator {
public int calculate(int a, int b);
}
interface Sumator {
public int test();
public int test3(int a, int b);
}
// intersection of both types
interface Both extends Sumator, Calculator {
}
这有点令人误解,我确实知道有关转换为交集类型的知识,我已经阅读了jls,但仍然感到困惑。
这有点道理,为什么
Serializable & Comparable
会编译,因为两者之间的结果(综合类型)是一个功能接口,但是为什么这样做:
Calculator & Sumator
作品?该综合类型不是功能接口。
最佳答案
这是bug in Eclipse,已针对Eclipse Neon(4.6)的里程碑6进行了修复。
关于java - Lambda和强制转换交集类型(Eclipse编译器错误),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35268927/