Java 用列表表示怀疑<;通用>;显式转换

Java 用列表表示怀疑<;通用>;显式转换,java,generics,casting,Java,Generics,Casting,我不明白为什么在某些情况下,我可以做出明确的演员阵容,而在其他情况下,我不能。谢谢大家 //DAreaLabel extends Message //This Code Works List<Message> list1 = (List<Message>) Arrays.asList((Message[]) getPageRecords(getClasspath(), methodName, object)); DAreaLabel areaLabe

我不明白为什么在某些情况下,我可以做出明确的演员阵容,而在其他情况下,我不能。谢谢大家

//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扩展消息
//此代码有效
列表1=(列表)
asList((Message[])getPageRecords(getClasspath(),methodName,object));
DAreaLabel areaLabel=(DAreaLabel)
((List)Arrays.asList((Message[])getPageRecords(getClasspath(),methodName,object))).get(0);
//此代码不起作用
列表2=(列表)
asList((Message[])getPageRecords(getClasspath(),methodName,object));

您的后一个强制转换不起作用,本质上是因为泛型不是协变的


也就是说,假设
DAreaLabel
Message
的一个子类型,那么您可以将一条消息强制转换为DAreaLabel,但是您无法将
列表
强制转换为
列表
,这实际上是您在后一种情况下尝试执行的操作。

您的后一强制转换无效,本质上是因为泛型不是协变的


也就是说,假设
DAreaLabel
Message
的一个子类型,那么您可以将一条消息强制转换为DAreaLabel,但无法将
列表
强制转换为
列表
,这实际上是您在后一种情况下尝试执行的操作。

即使
DAreaLabel
是(大概是)
消息
列表
的子类不是
列表
的子类。答案是为什么。因此,最后一个案例无法编译。第一种情况也不需要强制转换。

即使
DAreaLabel
是(大概)消息的子类,
List
也不是
List
的子类。答案是为什么。因此,最后一个案例无法编译。第一种情况也不需要强制转换。

您应该能够将
列表
强制转换为
列表您应该能够将
列表
强制转换为
列表。您可以格式化以使其可读吗?编译器给出了什么错误?细微的挑剔,但我从那些英语不是他们主要语言的人身上看到了很多:如果你不懂一些东西,你有一个问题,而不是疑问。如果你认为某些东西可能出错,你就有疑问。你能把它格式化成可读的格式吗?编译器给出的错误是什么?细微的挑剔,但我从那些英语不是他们主要语言的人身上看到了很多:如果你不懂某些东西,你有一个问题,而不是疑问。如果你认为某件事可能不对劲,你就有疑问。