那么,为什么要编译此代码?

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/

10-10 20:17