문제

나는 ArrayList 의 다른 요소에서 가져온 db 만들의 문자열 숫자 복식과 수.이 있습 방법을 사용하는 반사 유형 기술이 무엇을 찾고 각 유형의 데이터를 각각의 요소가 보유?

참고:이유가 있다 그래서 많은 종류의 데이터는 것이 자바의 코드 작성되고 실행되는 다른 DB 습니다.

도움이 되었습니까?

해결책

C#
고정와 추천

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);
    }
    ...
}

다른 팁

사용할 수 있습니다 getClass() 방법,또는 당신이 사용할 수 있습 instanceof.예를 들어

for (Object obj : list) {
  if (obj instanceof String) {
   ...
  }
}

for (Object obj : list) {
 if (obj.getClass().equals(String.class)) {
   ...
 }
}

참고는 다른 것입니다 경기 하위 클래스.예를 들어,의 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)) {
    ...
}

지 않기 때문에 차지한 가능한 하위 클래스.당신이 정말로 원하는 사용하는 등#isAssignableFrom:

Object o = ...
if (Foo.class.isAssignableFrom(o)) {
    ...
}

자바에서 단지를 사용하여 다른 연산자입니다.이것 또한 돌의 서브 클래스.

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

Instanceof 작동하지 않는 경우에 따라 특정 클래스를,그러나 또한 마음을 가질 수 있다는 null 을 목록에서,그래서 obj.getClass()실패할 것이다,하지만 다른 항상 false 를 반환에 null 입니다.

Java8


        mixedArrayList.forEach((o) -> {
            String type = o.getClass().getSimpleName();
            switch (type) {
                case "String":
                    // treat as a String
                    break;
                case "Integer":
                    // treat as an int
                    break;
                case "Double":
                    // treat as a double
                    break;
                ...
                default:
                    // whatever
            }
        });

를 사용하는 대신 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

당신이 말하는"이것은 조각 자바의 코드 작성되고",에서는 추론하는 아직 기회는 그것을 디자인할 수 있었습 다른 방법이다.

데 ArrayList 은 컬렉션이 있습니다.보다는 힘 또는 다른 getClass 당신이 시체 목록에서,이유 없는 디자인으로 시스템을 얻을 수 있도록 개체의 유형을 때 당신은에서 검색하고 DB 에 저장 컬렉션으로 적절한 형식의 개체?

또는,사용할 수있는 중 하나 많은 데이터 액세스 라이브러리하기 위해 존재하는 당신을 위해이 작업을 수행합니다.

기대할 경우에는 데이터는 숫자에서 어떤 형태로,그리고 모든 일에 관심이 있다 변환 결과하는 숫자 값을 것이 좋:

for (Object o:list) {
  Double.parseDouble(o.toString);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top