DB에서 가져온 여러 요소로 구성된 ArrayList가 있으며 문자열, 숫자, double 및 int로 구성됩니다. 리플렉션 유형 기술을 사용하여 각 요소가 보유하는 각 데이터 유형을 알아내는 방법이 있습니까?
참고 : 데이터 유형이 너무 많은 이유는 이것이 다른 DB로 구현되도록 작성되는 자바 코드 조각이기 때문입니다.
답변
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);
}
...
}
자바 :
ArrayList<Object> list = ...;
for (Object o : list) {
if (o instanceof Integer)) {
handleInt((Integer o).intValue());
}
else if (o instanceof String)) {
handleString((String)o);
}
...
}
답변
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<Object> listOfObjects = new ArrayList<Object>();
for(Object obj: listOfObjects){
if(obj instanceof String){
}else if(obj instanceof Integer){
}etc...
}
답변
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());
}
}
}
}
답변
루프 .getClass()
에서 각각 Object
을 호출하십시오 .
불행히도 Java에는 map()
. 🙂