Java:将对象强制转换为泛型类型
在 Java 中,当从对象强制转换为其他类型的时,为什么第二行会产生与强制转换相关的警告,而第一行则不会?
void a(Object o) {
Integer i = (Integer) o;
List<Integer> list = (List<Integer>) o;
}
/*Type safety: Unchecked cast from Object to List<Integer>*/
在 Java 中,当从对象强制转换为其他类型的时,为什么第二行会产生与强制转换相关的警告,而第一行则不会?
void a(Object o) {
Integer i = (Integer) o;
List<Integer> list = (List<Integer>) o;
}
/*Type safety: Unchecked cast from Object to List<Integer>*/
这是因为由于类型擦除,在执行时不会真正检查对象是否为 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!
Jon的答案是正确的,但有时你无法绕过这个警告(就像你在使用遗留API时一样)。在这些情况下,您可以像这样禁止显示警告:
@SuppressWarnings("unchecked")
List<Integer> list = (List<Integer>) someApiThatReturnsNonGenericList();