java - 对 List<Generic> 显式强制转换的怀疑

标签 java generics casting

我不明白为什么在某些情况下我可以进行显式转换,而在其他情况下却不能。谢谢大家!

//DAreaLabel extends Message 

//This Code Works
List<Message> list1 = (List<Message>)
        Arrays.asList((Message[]) getPageRecords(getClasspath(), methodName, object));

DAreaLabel areaLabel = (DAreaLabel)
        ((List<Message>) Arrays.asList((Message[]) getPageRecords(getClasspath(), methodName, object))).get(0);

//This Code does not Work
List<DAreaLabel> list2 = (List<DAreaLabel>)
        Arrays.asList((Message[]) getPageRecords(getClasspath(), methodName, object));

最佳答案

你的后一个转换不起作用,主要是因为泛型不是协变的。

也就是说,假设 DAreaLabelMessage 的子类型,那么您可以将 Message 转换为 DAreaLabel,但不能转换 List<Message>进入List<DAreaLabel> ,这实际上就是您在后一种情况下尝试做的事情。

关于java - 对 List<Generic> 显式强制转换的怀疑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567418/

相关文章:

java - 原始 float 到 int 的转换是可能的,但对于引用类型是不可能的,为什么?

java - 如何使用 Json 对象的动态属性名称

C# 泛型方法类型参数不是从用法中推断出来的

java - 通用 toMap 收集器无法编译

java - 参数化 Java 类以获取任意多个接口(interface)

ios - Swift 类/结构隐式符合 NSObjectProtocol?

java - 如何将字符串(字节数组作为字符串)转换为短字符串

java - Tomcat 8 如何设置jarsToSkip

java - bukkit 插件《我的世界》箱子用列表中的 int 填充并从类构建

java - jwrapper online Windows 因 https updateurl 失败