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
的子类。答案是为什么。因此,最后一个案例无法编译。第一种情况也不需要强制转换。您应该能够将列表
强制转换为列表您应该能够将列表
强制转换为列表。您可以格式化以使其可读吗?编译器给出了什么错误?细微的挑剔,但我从那些英语不是他们主要语言的人身上看到了很多:如果你不懂一些东西,你有一个问题,而不是疑问。如果你认为某些东西可能出错,你就有疑问。你能把它格式化成可读的格式吗?编译器给出的错误是什么?细微的挑剔,但我从那些英语不是他们主要语言的人身上看到了很多:如果你不懂某些东西,你有一个问题,而不是疑问。如果你认为某件事可能不对劲,你就有疑问。