我使用Arraylist来保存异构数据……混合了String、int和class对象(这些对象可以是我定义的任何类的实例)。我已经将ArrayList初始化为ArrayList<Object> = new ArrayList<Object>。
但是我想我听人说过,直接引用对象是一种东西。坏的/不受欢迎的?我之所以提到对象,是因为我找不到任何合适的泛型在我的例子中使用。可以使用吗?或者有合适的泛型吗?(我对Java比较陌生)
发布于 2011-02-25 19:13:23
对每种类型使用不同的列表,并将这些列表保存在映射中,您可以使用类对象作为键,这样它就不会混淆并易于访问。
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<?>>());编辑:
附注:如果您想要将新对象添加到列表中,当您从地图中检索列表时,您仍然会收到未选中的警告。
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);
}
}发布于 2011-02-25 18:52:44
无论何时将Object作为泛型分类器,您最终都会得到许多丑陋的语句,比如
if (elem instanceOf String)
else if (elem instanceOf Integer)诸若此类。通常情况下,对每一个使用单独的列表更好,例如,
List<String> strings = new LinkedList<String>();
List<Integer> ints = new LinkedList<Integer>();因此,我建议你重新设计你的程序,以便更好地利用java的特性。
发布于 2011-02-25 18:50:11
如果你事先不知道目标对象的类型,你真的不需要使用泛型。
编译器可能会给出一个警告,但是好人在这样的邪恶中能做什么呢?
注意:您实际上可以使用无界和通配符来忽略警告,但我不确定它是否会有帮助。
https://stackoverflow.com/questions/5116269
复制相似问题