java - 将泛型列表转换为特定类型时出现 ClassCastException

标签 java

在下面的代码中,当从字符串的 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/

相关文章:

java - 如果客户端从不发送 FIN 数据包关闭连接,连接是否超时?

java - Spring 批处理文件编写器直接写入亚马逊 s3 存储,无需 PutObjectRequest

java - 使用注释在剩余调用中传递 JSON 参数

Java解析字节

java - maxUploadsize 和 maxInMemorySize 之间的区别

java - Jetty:找出哪个连接器用于传入请求

java - 将 Apple APNs 身份验证 key 加载到 Java PrivateKey

java - 如何使用 Selenium WebDriver 启动 InternetExplorerDriver

java - 文档类型声明包含或指向的标记声明必须格式正确

java - 我的 java 小程序上出现 SecurityException