지 알려면 어떻게 합니까 어떤 종류의 각 객체에서 ArrayList<Object>?
-
01-07-2019 - |
문제
나는 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);
}