我不明白为什么在某些情况下我可以做一个明确的演员,而在其他情况下我不能.谢谢大家!
//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));
Run Code Online (Sandbox Code Playgroud)
你的后者演员不起作用,主要是因为泛型不是协变的.
也就是说,假设DAreaLabel
是子类型Message
,那么你可以将一个消息转换为DAreaLabel,但是你不能将a List<Message>
转换为a List<DAreaLabel>
,这实际上就是你在后一种情况下要做的事情.