java - 当您尝试将 LinkedList 转换为 LinkedList<String> 时,编译时会发生什么?

标签 java generics casting

在下面的内容中,我在第 5 行(而不是第 4 行)收到运行时异常。该强制转换实际上在做什么? 任何见解或相关阅读的链接都很棒。

List list = new LinkedList();
list.add(new Date());
list.add("Hello");
List<String> list2 = (List<String>)list;
String value = list2.get(1);

最佳答案

What is that cast actually doing?

执行时什么都没有。这就是为什么您会收到一条警告,指出这是一个未检查的强制转换 - 它并没有真正检查任何内容,因为对象本身(在执行时)没有 List<String> 的概念。 - 这只是一个列表。如果您有:

Object x = ...;
List<String> list = (List<String>) x;

然后会检查 x引用某种类型的列表...但它不会检查列表的“字符串性”。

不幸的是,这就是 Java 泛型的工作方式:(

关于java - 当您尝试将 LinkedList 转换为 LinkedList<String> 时,编译时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26687576/

相关文章:

java - 调用类构造函数和使用 Class.forName().newInstance 的区别

java - 什么正则表达式将提取该字符串?

c++ - 我应该使用它还是 static_cast<void*> 然后 static_cast<myType*> 来避免重新解释?

c++ - Qt错误iso c++禁止比较指针和整数-fpermissive

c++ - 类型转换 C++

java - 用于提取包含管道字符的文本的正则表达式

java - 我可以在 Android 应用程序中使用 Google map 以外的 map 服务器吗?

java - Java 有界通配符泛型的编译器错误

c# 如何将泛型类型参数转换并传递给内部函数?

java - 一个 Java 泛型函数来合并 3 种类型的循环