Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';t下列代码会导致“;“未经检查的铸件”;警告_Java_Unchecked Cast - Fatal编程技术网

Java 为什么';t下列代码会导致“;“未经检查的铸件”;警告

Java 为什么';t下列代码会导致“;“未经检查的铸件”;警告,java,unchecked-cast,Java,Unchecked Cast,我认为(String)x是未经检查的强制转换,但编译器没有给出任何警告。为什么会这样 public static void main(String[] args) { Object x=new Object(); String y=(String)x; } 我认为(String)x是未经检查的强制转换 不,不是。它在执行时被检查-如果强制转换无效,它将抛出一个异常 Unchecked cast是关于那些看起来会进行检查的类型转换,但实际上由于类型擦除,它

我认为
(String)x
是未经检查的强制转换,但编译器没有给出任何警告。为什么会这样

public static void main(String[] args) {
        Object x=new Object();
        String y=(String)x;
    }
我认为
(String)x
是未经检查的强制转换

不,不是。它在执行时被检查-如果强制转换无效,它将抛出一个异常

Unchecked cast是关于那些看起来会进行检查的类型转换,但实际上由于类型擦除,它们不会检查您期望的所有内容。例如:

List<String> strings = new ArrayList<>();
Object mystery = strings;
List<Integer> integers = (List<Integer>) mystery;
integers.add(0); // Works
String x = strings.get(0); // Bang! Implicit cast fails

Java编译器只对泛型类型发出未经检查的强制转换警告

只要强制转换类在同一层次结构中(不是同级),编译器就不会抱怨。为什么您认为它是未经检查的强制转换?(不是。)@Radiodef看来我应该更加耐心地学习Java。这几天我一直在误解一些事情。非常感谢你快速而清晰的回答。
List strings = new ArrayList();
Object mystery = strings;
List integers = (List) mystery;
integers.add(0);
String x = (String) strings.get(0);