2012-02-18 8 views
8

Java에 Object가 있습니다. 객체가 String, HashMap 또는 HashMap []의 인스턴스인지 여부를 확인하는 방법이 있습니까?Object가 String, HashMap 또는 HashMap []의 인스턴스인지 확인합니다.

위와 같이하면 직관력이 떨어지는 것처럼 보이므로 각 객체에 캐스팅하고 실제로 캐스팅 된 객체의 유형을 확인하기 위해 새로 캐스팅 된 객체에 대한 테스트 방법이 있습니까? 캐스팅?

+1

대신에'instanceof'를 사용하는 대신 여러분은 항상 추정 된 객체 유형으로 캐스팅하고'ClassCastException'을 수신 할 수 있습니다. –

+2

@HotLicks : True. 하나의 작은 차이점은'obj'가'null' 인 경우'(obj instanceof ____)'는'false'가되지만'((__) obj)'는 예외를 발생시키지 않는다는 것입니다. – ruakh

+0

@ruakh - 수정하십시오. (그리고 난 단지 'instanceof' 대 잡는 예외의 사용을 옹호하지 않았다, 그것은 너무 일할 것이라고 지적했다.) –

답변

25

예 : 그런데

if(obj instanceof String) 
{ 
    String str = (String) obj; 
    . 
    . 
    . 
} 

, 이에 대해 명확히하기 :

[중 & hellip] 새로 주조 된 개체에 대한 테스트 뭔가를 볼 경우 개체의 사실 종류에 그것은 주조 되었는가?

에 잘못된 유형을 입력 할 수 없습니다. obj 유형이 String 인 경우 ((Integer)obj)은 실행시에 ClassCastException가 발생하도록합니다.

+1

주목할 점은 obj가 null 일 때'instanceof'가 false를 반환한다는 점입니다 –

+0

그래서 만약 내가 out.println() 객체와 나는 "[Ljava.lang.Object; @ 4296e599"이 무엇을 의미합니까? Map 또는 HashMap이라고 생각했지만 인스턴스를 테스트 할 때 false가 표시됩니다. –

+2

즉,'Object []'타입을 가지고 있음을 의미합니다. 'System.out.println (java.util.Arrays.toString ((Object []) ____))''('____'은 변수 이름)을 사용하여 배열 요소를 출력 할 수 있습니다. – ruakh

8

instanceof 연산자를 찾고 있습니다.

instanceof 연산자는 개체를 지정된 형식과 비교합니다. 을 사용하여 객체가 클래스의 인스턴스인지 여부, 서브 클래스의 인스턴스 또는 특정 인터페이스를 구현하는 클래스의 인스턴스인지 여부를 테스트 할 수 있습니다.

: false을 반환 true new Integer(5) instanceof String 동안 "Hello" instanceof String을 반환합니다.

2

instanceof을 사용해야하는 경우 디자인에 문제가있을 수 있습니다. String, HashMap 또는 HashMap 배열이 있는지 확인하고 있습니까? 어디에서 추상화와 정보 숨김이 있습니까?

Java의 은 객체 지향 언어입니다. 네가 해결하려는 문제가 뭔지 모르지만 네가 잃어버린 것처럼 들린다. 이보다 더 나은 추상화를 생각해야합니다.

+0

도와 드릴까요? 이 질문은 http://stackoverflow.com/questions/9337536/iterate-recursively-through-deep-hashmap/9337639#9337639를 참조한 것입니다. –