繁体   English   中英

为何添加 <?> 从String列表转换为Double列表时,列表声明会导致错误?

[英]Why adding <?> to List declaration causes error when converting from String list to Double list?

我正在尝试将String列表转换为Double列表,如下所示:

List<String> myStringList = Arrays.asList("10.0", "10.5", "5.0");
List<?> myDoubleList = new ArrayList();
for(String s : myStringList){
        myDoubleList.add(Double.parseDouble(s));
}

当我从列表描述中删除<?> ,它可以工作。 但是当我添加它时会中断。 它给了我这个错误:

类型List中的方法add(capture#6-of?)不适用于参数(double)

这是为什么 ?

这背后的想法是List<?>表示某种未知类型的通用List 这个List<?>可以是List<String>List<Double>List<File> ,或者其他任何东西,所有这些都算作List<?> 这意味着如果你有一个List<?>类型的变量,你不能只添加一个Double ,因为myListOfWildcard.add(someDouble)如果myListOfWildcard实际上是一个List<String>就会失败。

通配符(特别是List<?> )对于您希望能够包含任何内容的列表没有用处。 对于那些您通常想要使用List<Object> 如果您想让自己处于这些特殊情况,那么通配符会更有用。 如果你有一个方法,并且你希望它能够接受任何类型的列表,无论它是List<String>还是List<Double> ,这就是List<?>对它有用,因为其中任何一个都是List<?> 但是,您无法假设列表的实际泛型类型参数,这意味着您不能只添加Double

List<?>为快捷List<? extends Object> List<? extends Object> 通配符列表最常用作方法的参数; 你通常不想自己创造它们。 Collection.containsAll是一个很好的现实使用示例:特别是, Collection.containsAll接受任何Collection作为其参数。 它不必是Collection<Object> ,但如果Collection<Object>列为其类型而不是Collection<?>

编辑:添加评论段落。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM