2011-02-25 70 views
1

我正在使用Arraylist來保存異構數據...... String,intclass對象的混合(這些對象可以是我定義的任何類的實例)。我已將ArrayList初始化爲ArrayList<Object> = new ArrayList<Object>在arraylist中使用合適的泛型

但我覺得我聽說過ppl說直接指的是對象是......。壞/不可取?我指的是這些對象,因爲我無法找到適合我的案例的仿製藥。可以使用還是有任何合適的仿製藥? (我對Java比較陌生)

+4

你在做什麼這個清單?我的第一個直覺是,即使你所做的完全是「合法的」,設計/意圖也可能存在缺陷。 – Carl

+0

我試圖返回這個列表,任何其他檢索這個列表的方法都會提取其中的項目以供進一步處理。 – mannyee

+0

客戶端對這樣的列表中的元素做什麼處理?它必須做到這一點,沒有任何類型的具體知識。這就是你的設計? – Bhaskar

回答

2

爲每種類型使用不同的列表,並將這些列表保存在地圖中,並且可以使用類對象作爲關鍵字,這樣它就不會混淆並且易於訪問。

Map<Class<?>,List<?>> map = new HashMap<Class<?>,List<?>>(); 
map.put(String.class, new ArrayList<String>()); 
map.put(Integer.class, new ArrayList<Integer>()); 
map.put(Class.class, new ArrayList<Class<?>>()); 

編輯:

P.S:當你從地圖上檢索列表中,如果要添加新的對象到列表中你仍然會得到一個未經檢查的警告。

public static void main(String[] args) { 
     Map<Class<?>,List<?>> map = new HashMap<Class<?>,List<?>>(); 
     map.put(String.class, new ArrayList<String>()); 
     map.put(Integer.class, new ArrayList<Integer>()); 
     map.put(Class.class, new ArrayList<Class<?>>()); 

     String str = "deneme"; 

     @SuppressWarnings("unchecked") 
     List<String> strList = (List<String>) map.get(String.class); 
     strList.add(str); 
     strList.add("str2"); 
     strList.add("str2"); 

     @SuppressWarnings("unchecked") 
     List<Class<?>> classList = (List<Class<?>>) map.get(Class.class); 
     classList.add(String.class); 
     classList.add(Integer.class); 
     classList.add(Double.class); 


     for(String currentStr:strList){ 
      System.out.println(currentStr); 
     } 
    } 
+0

您能否發佈一個工作示例,以便更清楚地瞭解爲什麼要像上述場景那樣執行它。 – Deepak

+0

@Deepak一旦你從地圖中檢索到列表,你仍然會得到一個未經檢查的強制性警告,如果你是這個意思,那麼它將會是列表。地圖只是爲了保持列表容易訪問的方式,如果你不知道有多少,什麼時候需要列表未知類型T. – fmucar

+0

可以發佈這種情況下的完整工作示例 – Deepak

0

如果您事先不知道目標對象的類型,那麼您確實不需要使用泛型。

編譯器可能會發出警告,但好男人可以做什麼這樣的惡魔!

注意:您實際上可以使用無界和通配符來忽略警告,但我不確定它是否會有幫助。

+0

以及我已經使用ArrayList' ,但它也不工作 – mannyee

1

當你把一個Object作爲一種通用的分類,你會與很多醜陋的陳述結束了,像

if (elem instanceOf String) 
else if (elem instanceOf Integer) 

等。通常,最好使用單獨的列表中爲每個,例如,

List<String> strings = new LinkedList<String>(); 
List<Integer> ints = new LinkedList<Integer>(); 

因此,我會建議您重新設計程序,以更好地利用功能的Java fascilitates的。