在 Java 7 中,检查方法的不同类型会导致编译错误,而在 Java 8 中则不会出现编译错误。是否可以检查泛型并使其在 Java 8 中产生编译错误?
class CheckedEquals{
public static <T> boolean checked(T expected, T actual) {
return com.google.common.base.Objects.equal(expected, actual);
}
}
class ShouldFailAtCompileTime{
public void foo(){
if(CheckedEquals.checked("String", Boolean.TRUE)){
System.err.println("");
}
}
}
最佳答案
此处不导致编译错误的行为是正确的,因为泛型类型参数T
是Object
。如果未指定类型参数,编译器还应该如何猜测?我想知道 Java 7 是如何做到这一点的,据我所知没有任何变化。
然而,这会导致编译错误:
CheckedEquals.<String>checked("String", Boolean.TRUE)
关于Java 8 泛型类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46706487/