我正在使用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