Java8泛型类型检查

Java8泛型类型检查,java,generics,compiler-errors,Java,Generics,Compiler Errors,在Java7中,checked方法的不同类型会导致编译错误,而在Java8中没有编译错误。是否有可能检查泛型并使其在Java8中产生编译错误 class CheckedEquals{ public static <T> boolean checked(T expected, T actual) { return com.google.common.base.Objects.equal(expected, actual); } } class Shoul

在Java7中,checked方法的不同类型会导致编译错误,而在Java8中没有编译错误。是否有可能检查泛型并使其在Java8中产生编译错误

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("");
        }
    }
}
类CheckedEquals{
已选中公共静态布尔值(预期为T,实际为T){
返回com.google.common.base.Objects.equal(预期、实际);
}
}
类应在编译时失败{
公共图书馆{
if(CheckedEquals.checked(“字符串”,Boolean.TRUE)){
System.err.println(“”);
}
}
}

由于泛型类型参数
T
对象,因此导致编译错误的行为在这里是正确的。如果没有指定类型参数,编译器应该如何猜测它?我想知道Java7是如何做到这一点的,据我所知没有任何变化

但是,这会导致编译错误:

CheckedEquals.<String>checked("String", Boolean.TRUE)
CheckedEquals.checked(“字符串”,Boolean.TRUE)

在您的示例中,T是对象。。。不知道为什么它不能用Java 7编译。@assylias是对的,但这是问题的核心点。:)你能在问题中包括编译错误吗?看起来IDE很聪明。编译器从未报告过错误。Idea在某些情况下会抛出错误,但Eclipse的更高版本不会报告任何问题。编译器实际上可以猜测未指定的类型参数。事实上,这不是猜测它的类型推断。请参阅Oracle java教程中的。据我所知,Java8中的类型推断已得到改进(另请参见)。我的猜测是,Java7无法推断出
T
的类型,但Java8经过改进后,可以推断出类型。在本例中,Java8为
T
推断
Object
。我认为Java7猜测预期的和实际的必须具有相同的类型。