2013-02-19 90 views
3

我在混合泛型和非泛型集合時面臨着兩難的境地。例如: 這是新的java 5/6通用代碼。在java中混合泛型和非泛型集合

List<Integer> list = new ArrayList<Integer>(); 
list.add(5); 

Alpha a = new Alpha(); 
a.insert(list); 

for (Integer integer : list) { 
System.out.println(integer);  //will get classCastException 
} 

非一般的遺留代碼

public class Alpha { 
    public void insert(List list) { 
    list.add(new String("50")); 
    } 
} 

我知道時間,我會在運行時得到ClassCastException異常。 但是我想打印列表的所有元素,即使添加了字符串/狗後。 有人可以建議我怎麼做到這一點?

回答

2

當然 - 你只需要避免編譯器插入投給你:

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

public class Test { 

    public static void main(String[] args) { 
     // Nice strongly-typed list... 
     List<Integer> list = new ArrayList<Integer>(); 
     list.add(5); 

     // Now abuse it... 
     List raw = list; 
     raw.add("Bad element");   

     // Don't use the "integer" part, effectively... 
     for (Object x : list) { 
      System.out.println(x); 
     } 
    } 
} 

現在,編譯器的每個元素是不是鑄造Integer,所以我們沒關係。

但是 - 如果您需要這樣做,這表明您的代碼基本上有點損壞。修復Alpha以避免將意外的項目添加到列表中會更好。