这是Java通用类型推断编译器错误吗?

时间:2019-05-08 15:57:26

标签: java generics compiler-errors

我正在考虑在函数的调用位置进行约束类型推断。在以下代码段中,我按预期在主函数中的第一个推断调用中遇到了编译错误(String不是X的子类型,因此我们不能推断出该类型),但是我确实当我用接口替换抽象类并执行相同的操作时,即使String不是Y的子类型,也不会出现编译错误。这一定是编译器错误吧? (我曾尝试使用jdk 1.8.121 + 1.8.161)。

public class Why
{
    static abstract class X
    {
    }

    static <Z extends X> Z infer1()
    {
        return null;
    }

    static interface Y
    {
    }

    static <Z extends Y> Z infer2()
    {
        return null;
    }

    public static void main(String[] args)
    {
        String x = infer1();
        String y = infer2();
    }
}

0 个答案:

没有答案