2013-06-19 83 views
0
import java.util.ArrayList; 
import java.util.List; 
import java.util.Collection; 

public class LowerBoundedWildCard { 
    public static void display(Collection<? super Integer> ints, int n) { 
     for (int i = 0; i < n; i++) { 
      ints.add(i); 
     } 
    } 

    public static void main(String[] args) { 

     List<Number> numList = new ArrayList<Number>(); 
     display(numList, 5); // Error 
     numList.add(19.43); // Error 
     } 
    } 

List<Integer>List<? super Integer>更嚴格,因爲前者只匹配整數類型的列表,而後者匹配任何類型是整型的超類型的列表。 Number是Integer的超類型並且是double,那麼爲什麼會出現這個錯誤?下界通配符Java泛型

請幫我解決上述問題。

+2

你確定你沒有在你的包數類,隱藏了「官方」的呢? – assylias

+0

什麼是錯誤信息? – sp00m

回答

2

我試過了代碼,沒有錯誤。我甚至可以打印沒有問題的列表:

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.List; 

public class Test 
{ 
    public static void display(Collection<? super Integer> ints, int n) { 
     for (int i = 0; i < n; i++) { 
      ints.add(i); 
     } 
    } 

    public static void main(String[] args) { 

     List<Number> numList = new ArrayList<Number>(); 
     display(numList, 5); 
     numList.add(19.43); 
     System.out.println("numList = " + numList); 
    } 

} 

輸出:

numList = [0, 1, 2, 3, 4, 19.43]