Wol*_*gon 87 java generics reflection arraylist
我有一个ArrayList,由从db导入的不同元素组成,由字符串,数字,双精度和整数组成.有没有办法使用反射类型技术来找出每个元素包含的每种类型的数据?
仅供参考:有这么多类型数据的原因是这是一段用不同的数据库编写的java代码.
Fra*_*ger 99
在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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
在Java中:
ArrayList<Object> list = ...;
for (Object o : list) {
if (o instanceof Integer)) {
handleInt((Integer o).intValue());
}
else if (o instanceof String)) {
handleString((String)o);
}
...
}
Run Code Online (Sandbox Code Playgroud)
far*_*ran 54
您可以使用该getClass()方法,也可以使用instanceof.例如
for (Object obj : list) {
if (obj instanceof String) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
要么
for (Object obj : list) {
if (obj.getClass().equals(String.class)) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,instanceof将匹配子类.例如,of C是子类A,那么以下将是真的:
C c = new C();
assert c instanceof A;
Run Code Online (Sandbox Code Playgroud)
但是,以下内容将是错误的:
C c = new C();
assert !c.getClass().equals(A.class)
Run Code Online (Sandbox Code Playgroud)
Fab*_*eeg 45
for (Object object : list) {
System.out.println(object.getClass().getName());
}
Run Code Online (Sandbox Code Playgroud)
Hea*_*ers 13
你几乎从不希望你使用类似的东西:
Object o = ...
if (o.getClass().equals(Foo.class)) {
...
}
Run Code Online (Sandbox Code Playgroud)
因为你没有考虑可能的子类.你真的想要使用Class#isAssignableFrom:
Object o = ...
if (Foo.class.isAssignableFrom(o)) {
...
}
Run Code Online (Sandbox Code Playgroud)
在Java中只需使用instanceof运算符.这也将处理子类.
ArrayList<Object> listOfObjects = new ArrayList<Object>();
for(Object obj: listOfObjects){
if(obj instanceof String){
}else if(obj instanceof Integer){
}etc...
}
Run Code Online (Sandbox Code Playgroud)
小智 5
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());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)