如何在Java中正确转换嵌套泛型类型
在Java中,我可以强制转换:如何在Java中正确转换嵌套泛型类型,java,generics,casting,Java,Generics,Casting,在Java中,我可以强制转换: List<?> j = null; List<Integer> j2 = (List<Integer>)j; List j=null; 列表j2=(列表)j; 那么,为什么下面的方法失败了呢 List<List<?>> i = null; List<List<Integer>> i2 = (List<List<Integer>>)i; List我猜您需
List<?> j = null;
List<Integer> j2 = (List<Integer>)j;
List j=null;
列表j2=(列表)j;
那么,为什么下面的方法失败了呢
List<List<?>> i = null;
List<List<Integer>> i2 = (List<List<Integer>>)i;
List我猜您需要执行通配符转换,才能将其转换为您想要的内容
List<?> j = null;
List<Integer> j2 = (List<Integer>)j;
List<List<?>> i = null;
List<List<Integer>> i2 = (List<List<Integer>>) (List<?>) i;
List j=null;
列表j2=(列表)j;
列出试试:
List>i=null;
列表i2=(列表)i;
来源(此来源将参考其他重要来源):
在您的第一段代码中:
在这里,您正在从列表
(它可以是列表
,列表
,列表
或任何内容)进行强制转换,而不是列表
的超集。因此出现了编译器错误
建议阅读:
错误信息是什么?这很好地解释了这一点:两种类型都是一个非常糟糕的想法,只是第一种类型是可疑的(无法证明是正确的),后一种类型是完全错误的。但是,您可以将列表
转换为列表
——因为?
可以代表任何东西,包括列表
。我只是再查了一下,发现了另一个stackoverflow帖子,解释了原因,请检查我的编辑。在我发布之前,我没有看到这一点,因为它提供了另一个解决方案唯一能真正回答如何做这一问题的答案有最少的投票:/“[…]用List
[…]表示的类型族不是List
的超集。实际上是!任何List
类型的对象都与更一般的List
类型相匹配。
List<? extends List<?>> i = null;
List<List<Integer>> i2 = (List<List<Integer>>)i;
List<?> j = null;
List<Integer> j2 = (List<Integer>)j;
List<List<?>> i = null;
List<List<Integer>> i2 = (List<List<Integer>>)i;