对List <Generic> Explicit Cast的疑问

0 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));
Run Code Online (Sandbox Code Playgroud)

And*_*yle 5

你的后者演员不起作用,主要是因为泛型不是协变的.

也就是说,假设DAreaLabel是子类型Message,那么你可以将一个消息转换为DAreaLabel,但是你不能将a List<Message>转换为a List<DAreaLabel>,这实际上就是你在后一种情况下要做的事情.