gpt4 book ai didi

java - 为什么在列表声明中添加 在从字符串列表转换为 double 列表时会导致错误?

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:54 27 4
gpt4 key购买 nike

我正在尝试将字符串列表转换为 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));
}

当我删除<?>时从列表描述来看,它有效。然而,当我添加它时它会中断。它给了我这个错误:

The method add(capture#6-of ?) in the type List is not applicable for the arguments (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> 的快捷方式。通配符列表最适合作为方法的参数;您通常不想自己创建它们。 Collection.containsAll是它们使用的一个很好的现实世界示例:特别是 Collection.containsAll接受任何 Collection作为其论点。它不一定是 Collection<Object> ,但如果 Collection<Object> 就会这样其中列为其类型而不是 Collection<?>

编辑:添加评论中的段落。

关于java - 为什么在列表声明中添加 <?> 在从字符串列表转换为 double 列表时会导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43493112/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com