2013-04-28 59 views
1

我想測試一些關於Java中的泛型的東西,所以我寫了一個使用泛型的方法,該泛型使用一個列表並刪除其他所有元素。我寫了這個方法,但它給出了一個UnsupportedOperationException錯誤。這裏有什麼問題?泛型代碼刪除不工作

Integer[] strArray = new Integer[] {1, 2, 3, 4, 5}; 
    List<Integer> numbers = Arrays.asList(strArray); 
    removeOdd(numbers); 
    for (Object o : numbers){ 
     System.out.println(o); 
    } 
} 
     public static <T> void removeOdd (List<T> list){ 
      Iterator<T> itr = list.iterator(); 
      int i = 0; 

       while(itr.hasNext()) 
       { 
        itr.next(); 
        i++; 
        if(i % 2 ==1){ 
         itr.remove(); 
        } 
       } 
+0

請參閱http://stackoverflow.com/questions/2965747/ – murat 2013-04-28 22:11:48

回答

5

Arrays.asList返回List其各個元件可以被更新,但元素的添加或移除是不允許的。要創建一個可變大小List,你可以使用:

List<Integer> numbers = new ArrayList<>(Arrays.asList(strArray)); 
+0

返回的列表由數組支持,並且可能會被修改。調用'set(int,E)'將成功替換一個元素。 – 2013-04-28 22:13:54

+0

元素可能被設置但不能被刪除 – Reimeus 2013-04-28 22:14:54

+0

因此列表是可變的。 ;) – 2013-04-28 22:16:13

7

Arrays.asList(T...)創建一個固定大小的列表。您可以替換元素,但不能添加或刪除任何元素。