DB에서 가져온 여러 요소로 구성된 ArrayList가 있으며 문자열, 숫자, double 및 int로 구성됩니다. 리플렉션 유형 기술을 사용하여 각 요소가 보유하는 각 데이터 유형을 알아내는 방법이 있습니까?
참고 : 데이터 유형이 너무 많은 이유는 이것이 다른 DB로 구현되도록 작성되는 자바 코드 조각이기 때문입니다.
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);
}
...
}
instanceof
자바 케이스에서 할 수 없습니까 ?
(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
데이터가 어떤 형태로든 숫자가 될 것으로 예상하고 결과를 숫자 값으로 변환하는 데 관심이 있다면 다음을 제안합니다.
for (Object o:list) {
Double.parseDouble(o.toString);
}