[英]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.