[java] ArrayList <Object>에서 각 개체가 어떤 유형인지 어떻게 알 수 있습니까?

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(). 🙂