我正在使用Arraylist
來保存異構數據...... String
,int
和class
對象的混合(這些對象可以是我定義的任何類的實例)。我已將ArrayList
初始化爲ArrayList<Object> = new ArrayList<Object>
。在arraylist中使用合適的泛型
但我覺得我聽說過ppl說直接指的是對象是......。壞/不可取?我指的是這些對象,因爲我無法找到適合我的案例的仿製藥。可以使用還是有任何合適的仿製藥? (我對Java比較陌生)
我正在使用Arraylist
來保存異構數據...... String
,int
和class
對象的混合(這些對象可以是我定義的任何類的實例)。我已將ArrayList
初始化爲ArrayList<Object> = new ArrayList<Object>
。在arraylist中使用合適的泛型
但我覺得我聽說過ppl說直接指的是對象是......。壞/不可取?我指的是這些對象,因爲我無法找到適合我的案例的仿製藥。可以使用還是有任何合適的仿製藥? (我對Java比較陌生)
爲每種類型使用不同的列表,並將這些列表保存在地圖中,並且可以使用類對象作爲關鍵字,這樣它就不會混淆並且易於訪問。
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);
}
}
如果您事先不知道目標對象的類型,那麼您確實不需要使用泛型。
編譯器可能會發出警告,但好男人可以做什麼這樣的惡魔!
注意:您實際上可以使用無界和通配符來忽略警告,但我不確定它是否會有幫助。
以及我已經使用ArrayList' '>,但它也不工作 – mannyee
當你把一個Object
作爲一種通用的分類,你會與很多醜陋的陳述結束了,像
if (elem instanceOf String)
else if (elem instanceOf Integer)
等。通常,最好使用單獨的列表中爲每個,例如,
List<String> strings = new LinkedList<String>();
List<Integer> ints = new LinkedList<Integer>();
因此,我會建議您重新設計程序,以更好地利用功能的Java fascilitates的。
你在做什麼這個清單?我的第一個直覺是,即使你所做的完全是「合法的」,設計/意圖也可能存在缺陷。 – Carl
我試圖返回這個列表,任何其他檢索這個列表的方法都會提取其中的項目以供進一步處理。 – mannyee
客戶端對這樣的列表中的元素做什麼處理?它必須做到這一點,沒有任何類型的具體知識。這就是你的設計? – Bhaskar