我不明白为什么在某些情况下我可以进行显式转换,而在其他情况下却不能。谢谢大家!
//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));
最佳答案
你的后一个转换不起作用,主要是因为泛型不是协变的。
也就是说,假设 DAreaLabel
是 Message
的子类型,那么您可以将 Message 转换为 DAreaLabel,但不能转换 List<Message>
进入List<DAreaLabel>
,这实际上就是您在后一种情况下尝试做的事情。
关于java - 对 List<Generic> 显式强制转换的怀疑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567418/