我有一个由从数据库导入的不同元素组成的ArrayList,它由字符串,数字,双精度数和整数组成。有没有一种方法可以使用反射类型技术来找出每个元素持有的每种数据类型?
仅供参考:数据类型如此之多的原因是,这是一段要编写的Java代码,可以通过不同的DB来实现。
Answers:
在C#中:
修正了Mike的建议
ArrayList list = ...;
// List<object> list = ...;
foreach (object o in list) {
if (o is int) {
HandleInt((int)o);
}
else if (o is string) {
HandleString((string)o);
}
...
}
在Java中:
ArrayList<Object> list = ...;
for (Object o : list) {
if (o instanceof Integer)) {
handleInt((Integer o).intValue());
}
else if (o instanceof String)) {
handleString((String)o);
}
...
}
instanceof
在Java情况下做吗?
(int) o
在Java中不起作用。它产生错误消息Cannot cast from Object to int
。使用(Integer o).intValue()
代替。
您可以使用该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());
}
import java.util.ArrayList;
/**
* @author potter
*
*/
public class storeAny {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Object> anyTy=new ArrayList<Object>();
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());
}
}
}
}
object.getClass().getName()
可以使用代替使用object.getClass().getSimpleName()
,因为它会返回一个简单的类名,其中不包含包名。
例如,
Object[] intArray = { 1 };
for (Object object : intArray) {
System.out.println(object.getClass().getName());
System.out.println(object.getClass().getSimpleName());
}
给,
java.lang.Integer
Integer