相关疑难解决方法(0)

ClassCast错误:Java 7与Java 8

这是一个错误或功能吗?以下代码在Java 7中运行正常但在Java 8中引发异常:

最后一个命令在Java8中抛出ClassCast异常,上面的所有"等效"命令的工作方式相同.

我认为问题在于,在Java 8中,编译器决定String.value(char[])在最后一行而不是String.value(Object)在Java 7中使用.我认为这对于向后兼容性应该采用相同的方式.我错过了什么吗?

注意:正如Marko所说,这可能与Java 8中引入的目标类型推断有关.

public class Test {
    public static void main(String[] args) {
        System.out.println( getVal().getClass());  // String

        System.out.println( String.valueOf(Test.<Object>getVal()) );   // "abc"

        Object obj = getVal();
        System.out.println( String.valueOf(obj) );  // "abc"

        System.out.println( String.valueOf(getVal()) ); // 7: "abc", 8: Exception 
    }

    // returns a string for simplicity; imagine that given a field, it fetches values from a database
    @SuppressWarnings("unchecked")
    public static <T> T getVal() {
        return (T) "abc";
    }
}
Run Code Online (Sandbox Code Playgroud)

Java …

java generics casting java-8

27
推荐指数
1
解决办法
3970
查看次数

标签 统计

casting ×1

generics ×1

java ×1

java-8 ×1