文字列、数値、倍精度浮動小数点数、整数で構成されるデータベースからインポートされたさまざまな要素で構成されるArrayListがあります。リフレクションタイプの手法を使用して、各要素が保持する各データタイプを調べる方法はありますか?
参考:データの種類が非常に多いのは、これが異なるDBで実装されるように記述されたJavaコードの一部であるためです。
回答:
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