我有一个ArrayList,由从db导入的不同元素组成,由字符串,数字,双精度和整数组成.有没有办法使用反射类型技术来找出每个元素包含的每种类型的数据?
仅供参考:有这么多类型数据的原因是这是一段用不同的数据库编写的java代码.
在C#中:
修正了Mike的推荐
ArrayList list = ...; // List
在Java中:
ArrayList
您可以使用该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)
for (Object object : list) { System.out.println(object.getClass().getName()); }
你几乎从不希望你使用类似的东西:
Object o = ... if (o.getClass().equals(Foo.class)) { ... }
因为你没有考虑可能的子类.你真的想要使用Class#isAssignableFrom:
Object o = ... if (Foo.class.isAssignableFrom(o)) { ... }
在Java中只需使用instanceof运算符.这也将处理子类.
ArrayList
import java.util.ArrayList; /** * @author potter * */ public class storeAny { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ArrayListanyTy=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()); } } } }