当前位置:  开发笔记 > 编程语言 > 正文

如何找出ArrayList <Object>中每个对象的类型?

如何解决《如何找出ArrayList<Object>中每个对象的类型?》经验,为你挑选了6个好方法。

我有一个ArrayList,由从db导入的不同元素组成,由字符串,数字,双精度和整数组成.有没有办法使用反射类型技术来找出每个元素包含的每种类型的数据?

仅供参考:有这么多类型数据的原因是这是一段用不同的数据库编写的java代码.



1> Frank Kruege..:

在C#中:
修正了Mike的推荐

ArrayList list = ...;
// List list = ...;
foreach (object o in list) {
    if (o is int) {
        HandleInt((int)o);
    }
    else if (o is string) {
        HandleString((string)o);
    }
    ...
}


在Java中:

ArrayList list = ...;
for (Object o : list) {
    if (o instanceof Integer)) {
        handleInt((Integer o).intValue());
    }
    else if (o instanceof String)) {
        handleString((String)o);
    }
    ...
}


你不能只在java案例中做`instanceof`吗?
实际上,而不是使用o.GetType()== typeof(int))只是说if(o是int);
对于Integer的情况,它也应该是Integer.class,我只是尝试了Integer.TYPE不起作用.

2> faran..:

您可以使用该getClass()方法,也可以使用instanceof.例如

for (Object obj : list) {
  if (obj instanceof String) {
   ...
  }
}

要么

for (Object obj : list) {
 if (obj.getClass().equals(String.class)) {
   ...
 }
}

请注意,instanceof将匹配子类.例如,of C是子类A,那么以下将是真的:

C c = new C();
assert c instanceof A;

但是,以下内容将是错误的:

C c = new C();
assert !c.getClass().equals(A.class)



3> Fabian Steeg..:
for (Object object : list) {
    System.out.println(object.getClass().getName());
}


如果列表中有可能,请不要忘记null.你会从这个例子中得到NullPointerExceptions和nulls.

4> Heath Border..:

你几乎从不希望你使用类似的东西:

Object o = ...
if (o.getClass().equals(Foo.class)) {
    ...
}

因为你没有考虑可能的子类.你真的想要使用Class#isAssignableFrom:

Object o = ...
if (Foo.class.isAssignableFrom(o)) {
    ...
}



5> Reid Mac..:

在Java中只需使用instanceof运算符.这也将处理子类.

ArrayList listOfObjects = new ArrayList();
for(Object obj: listOfObjects){
   if(obj instanceof String){
   }else if(obj instanceof Integer){
   }etc...
}



6> 小智..:
import java.util.ArrayList;

/**
 * @author potter
 *
 */
public class storeAny {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ArrayList anyTy=new ArrayList();
        anyTy.add(new Integer(1));
        anyTy.add(new String("Jesus"));
        anyTy.add(new Double(12.88));
        anyTy.add(new Double(12.89));
        anyTy.add(new Double(12.84));
        anyTy.add(new Double(12.82));

        for (Object o : anyTy) {
            if(o instanceof String){
                System.out.println(o.toString());
            } else if(o instanceof Integer) {
                System.out.println(o.toString());   
            } else if(o instanceof Double) {
                System.out.println(o.toString());
            }
        }
    }
}

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有