首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要在数组列表中使用的合适泛型

要在数组列表中使用的合适泛型
EN

Stack Overflow用户
提问于 2011-02-25 18:47:01
回答 3查看 255关注 0票数 1

我使用Arraylist来保存异构数据……混合了Stringintclass对象(这些对象可以是我定义的任何类的实例)。我已经将ArrayList初始化为ArrayList<Object> = new ArrayList<Object>

但是我想我听人说过,直接引用对象是一种东西。坏的/不受欢迎的?我之所以提到对象,是因为我找不到任何合适的泛型在我的例子中使用。可以使用吗?或者有合适的泛型吗?(我对Java比较陌生)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-25 19:13:23

对每种类型使用不同的列表,并将这些列表保存在映射中,您可以使用类对象作为键,这样它就不会混淆并易于访问。

代码语言:javascript
复制
 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<?>>());

编辑:

附注:如果您想要将新对象添加到列表中,当您从地图中检索列表时,您仍然会收到未选中的警告。

代码语言:javascript
复制
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);
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2011-02-25 18:52:44

无论何时将Object作为泛型分类器,您最终都会得到许多丑陋的语句,比如

代码语言:javascript
复制
if (elem instanceOf String)
else if (elem instanceOf Integer)

诸若此类。通常情况下,对每一个使用单独的列表更好,例如,

代码语言:javascript
复制
List<String> strings = new LinkedList<String>();
List<Integer> ints = new LinkedList<Integer>();

因此,我建议你重新设计你的程序,以便更好地利用java的特性。

票数 1
EN

Stack Overflow用户

发布于 2011-02-25 18:50:11

如果你事先不知道目标对象的类型,你真的不需要使用泛型。

编译器可能会给出一个警告,但是好人在这样的邪恶中能做什么呢?

注意:您实际上可以使用无界和通配符来忽略警告,但我不确定它是否会有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5116269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档