[英]suitable generics to use in an arraylist
我正在使用一個Arraylist
來保存異構數據... String
, int
和class
對象的混合(這些對象可以是我定義的任何類的實例。)。 我已經將ArrayList
初始化為ArrayList<Object> = new ArrayList<Object>
。
但是我想我已經聽過ppl說直接引用對象是……。 壞/不可取? 我指的是對象,因為找不到適合我的情況的泛型。 可以使用還是有合適的泛型? (我對Java比較陌生)
為每種類型使用不同的列表,並將這些列表保留在地圖中,您可以使用class對象作為鍵,這樣它就不會混淆並且易於訪問。
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<?>>());
編輯:
PS:如果要將新對象添加到列表中,則從地圖上檢索列表時,仍然會收到未經檢查的警告。
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);
}
}
每當將Object
用作通用分類器時,您最終都會遇到很多丑陋的語句,例如
if (elem instanceOf String)
else if (elem instanceOf Integer)
等等。 通常,最好為每個列表使用單獨的列表,例如,
List<String> strings = new LinkedList<String>();
List<Integer> ints = new LinkedList<Integer>();
因此,我建議您重新設計程序,以更好地利用Java促進的功能。
如果您事先不了解目標對象的類型,則確實不需要使用泛型。
編譯器可能會發出警告,但是好人在這種邪惡中能做什么!
注意 :實際上,您可以使用無界通配符和通配符來忽略該警告,但是我不確定它是否會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.