一尘不染

Java:将对象转换为通用类型

java

在Java中,从Object转换为其他类型时,为什么第二行会产生与转换相关的警告,而第一行却没有?

void a(Object o) {
  Integer i = (Integer) o;
  List<Integer> list = (List<Integer>) o;
}

/*Type safety: Unchecked cast from Object to List<Integer>*/

阅读 270

收藏
2020-12-03

共1个答案

一尘不染

这是因为在执行时,由于 类型Erase 不会 真正 检查对象是否为a 。真的只是将其投射到。例如:List<Integer> __List

List<String> strings = new ArrayList<String>();
strings.add("x");
Object o = strings;

// Warning, but will succeeed at execution time
List<Integer> integers = (List<Integer>) o;
Integer i = integers.get(0); // Bang!

有关更多信息,请参见Angelika
Langer的Java泛型常见问题解答
,尤其是类型擦除部分

2020-12-03