我正在考虑在函数的调用位置进行约束类型推断。在以下代码段中,我按预期在主函数中的第一个推断调用中遇到了编译错误(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();
}
}