在下面的代码中,当从字符串的 List
中获取实际值作为整数时,我只在第 6 行得到了 ClassCastException
。但我想在第 4 行早些时候得到这个异常。如您所见,第 5 行在没有 ClassCastException
public static void main(String[] args) {
List<String> original = Arrays.asList("1", "2", "3");
Object obj = original;
List<Integer> li = (List<Integer>)obj;
System.out.println(li); //[1, 2, 3]
Integer ei = li.get(0); //java.lang.ClassCastException
}
我知道 List
仅包含对实际对象(值)的引用,并且在阅读之前对实际内容一无所知。有什么正确的方法可以在第 4 行抛出 ClassCastException
吗?
最佳答案
正如编译器警告试图告诉你的那样(第 4 行的警告):类型断言中的泛型位(括号中的东西是非原始类型的强制转换)根本没有被检查,编译器只是信任你。
它实际上是一种类型断言(你,程序员,正在通知编译器它应该对其中的内容做出假设)。
做这样的事情的唯一方法是遍历该列表中的每个元素并检查它是否为整数。
关于java - 将泛型列表转换为特定类型时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378733/