List<Integer> ints = Arrays.asList(1,2,3,4,5);
List<Double> doubles = Arrays.asList(226.6131 , 7789879.3 );
List<Long> longs = Arrays.asList( 687643643687L , 743926945627L );
List<List<?>> lists = Arrays.asList(ints, doubles , longs); // Type mismatch: cannot convert from List<List<? extends Number&Comparable<?>>> to List<List<?>>
List<List<? extends Number & Comparable<?>>> lists = Arrays.asList(ints, doubles , longs); // Syntax error on token "&", , expected
我正在尝试创建一个列表列表,如上面的代码所示。首先,我有3个列表,每个列表都存储extends Number implements Comparable
的元素。接下来我想把3个列表放到另一个列表中,但我无法做到这一点。
List<List<?>> lists = Arrays.asList(ints, doubles , longs);
此行显示编译错误,指出无法从List<List<? extends Number&Comparable<?>>>
转换为List<List<?>>
。
当我尝试修改下一行中的引用类型时,会出现语法错误。
如何将上面的3个列表(ints
,doubles
和longs
)转换为另一个List<>
?
编辑:相关问题:
声明扩展List
和List
的{{1}} Number
个元素的正确语法是什么?
答案 0 :(得分:2)
我相信你想要的东西:
List<? extends List<?>> lists = Arrays.asList(ints, doubles , longs);
您可以使用此表单以获得更多类型的安全性:
List<? extends List<? extends Number>> lists = Arrays.<List<? extends Number>>asList(ints, doubles , longs);
答案 1 :(得分:2)
你可以试试这个:
List<? extends List<? extends Number>> lists
= Arrays.asList(ints, doubles , longs);
这仍然会提供未经检查的转换警告,但与目前为止提供的其他解决方案相比,它提供了更多的类型安全性。
您始终可以通过不使用Arrays.asList
:
List<List<? extends Number>> lists = new ArrayList<List<? extends Number>>();
lists.add(ints);
lists.add(doubles);
lists.add(longs);
答案 2 :(得分:1)
如果您的第二个列表由扩展类号的对象组成,您可以尝试:
List<? extends List<? extends Number>> lists = Arrays.asList(ints, doubles , longs);
答案 3 :(得分:0)
我不建议在列表中混合使用不同的类型。 如果你想这样做,我想你可以试着去掉内部列表中的泛型类型来保存任何对象。
List<List> lists = Arrays.asList(ints, doubles , longs);
答案 4 :(得分:0)
List<List<? extends Comparable<? extends Number>>> list = new ArrayList<List<? extends Comparable<? extends Number>>>();
和
list.add(整型);
答案 5 :(得分:0)
怎么样:
List<? extends Number> ints = (List<Integer>)Arrays.asList(1,2,3,4,5);
List<? extends Number> doubles = (List<Double>)Arrays.asList(226.6131 , 7789879.3 );
List<? extends Number> longs = (List<Long>)Arrays.asList( 687643643687L , 743926945627L );
List<List<? extends Number>> lists = Arrays.asList( ints, doubles, longs );
它没有任何气味和所有类型的安全性。
我希望添加Comparable
并不困难。