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);