簡體   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