# 39, s 클래스 object& 판단하는 데 어떻게?

클래스 A '와' B '클래스' 확장 및 클래스용 경우 'C' 나는 '또는' C ',' B 타입의 객체가 it 인스턴스입니다 재배케하여 유형을 파악할 수 있습니까?

질문에 대한 의견 (2)
해결책
if (obj instanceof C) {
//your code
}
해설 (6)

[오브ject.제클레스 ()] [1] 사용합니다. 런타임용으로 개발하십시오 반환할 객체의 타입은.

[1]: http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html # getClass% 28%29

해설 (3)

당시 여러 오른쪽맞춤 답변을 내놓은 수축됐는데 아직 더 많은 방법: 단순히 클레스트리사시냐블레프롬 () '와' 캐스트 (던질 수 있는 'a' 클라스카스티스세페시옹) 시도중입니다 객체에는.

요약 가능한 방법

39 의 요약하십시오 let& 가능한 방법으로 개체의 경우 '목표' 테스트하려면 인스턴스입니다 유형 'C':

// Method #1
if (obj instanceof C)
    ;

// Method #2
if (C.class.isInstance(obj))
    ;

// Method #3
if (C.class.isAssignableFrom(obj.getClass()))
    ;

// Method #4
try {
    C c = (C) obj;
    // No exception: obj is of type C or IT MIGHT BE NULL!
} catch (ClassCastException e) {
}

// Method #5
try {
    C c = C.class.cast(obj);
    // No exception: obj is of type C or IT MIGHT BE NULL!
} catch (ClassCastException e) {
}

'Null' 취급료 차이를

'Null' 취급료 표시되어도 차이가 있습니다.

  • 처음 두 가지 방법 '목표' 가 'false' 로 표현식에서는 평가하십시오 경우 'null' ('null' 인스턴스에서는 아무것도 아니다).
  • The 3rd 메서드로부터 누얼포인터렉세페시옹 '분명히' a '던질 수 있을 것 "이라고 말했다.
  • 4, 5 차 메서드을 반면 다른 유형으로 'null' 'null' 캐스팅 때문에 받아들일 수 있습니다!

&gt. 기억. 하지만 'null' 모든 유형의 인스턴스를 아닌 다른 유형으로 캐스팅 될 수 있습니다.

노트

  • '클라스이제나미 _&quot 수행하는 데 사용할 수 없습니다 ()', 'C' 유형 테스트 베케이스 is-instance-of&quot _을 객체인지 경우, 하위 것은 있을 수 있지만 그것을 완전히 다른 이름 및 패키지 (그리하매 클래스 이름은 확실히 일치하지 않습니다.) 이지만 문자 그대로 'C'.
  • 동일한 상속 이유 ' ()' 가 아닌 클레스트리사시냐블레프롬 symmetric: ' (c 클래스)' '거짓' 돌아갈 것이라고 스리자시냐블레프롬 오브j.제클레스 () '의 하위 클래스인 경우 목표' 유형 'C'.
해설 (1)

사용할 수 있습니다.

Object instance = new SomeClass();
instance.getClass().getName(); //will return the name (as String) (== "SomeClass")
instance.getClass(); //will return the SomeClass' Class object

하스. 하지만 내가 생각하는 대부분의 시간을 사용할 수 없기 때문에 제어 흐름이 또는 비슷한 것이 좋습니다.

해설 (1)

모든 방법을 사용할 경우 코드 기반으로 하는 나쁜 냄새를 제안됩니다 고려되는지 OO 의 디자인.

좋은 설계는 합니다 사용할 경우 직접 찾을 수 없는 ' ()' 또는 '하는 제클레스 instanceof'.

뭔가 한 것이 아니라, 모든 것을 염두에 두어야 하는 방법, 디자인 현명 할 것이다.

해설 (11)

이 경우 반사 수 있습니다.

objectName.getClass().getName();

예 -

,, 금지되었는지 &lt pre&gt &lt code&gt void (HttpServletRequest request, 스테파서블레트레스폰지 응답) 중 ioexception 이 세르베르테스세페시옹 던지는 도제, {

String name = request.getClass().getName();

} &lt /code&gt &lt /pre>;;;

이 경우 얻을 수 있는 '이름' 인터페이스입니다 레프랑스 HttpServletRequest 전달하십시오 객체에는 클래스 변수.

해설 (2)

또한 [ui_policytable_java_spe_policy '스이신스턴스'] [1] 에서 '클래스' &quot 메서드로부터 "; 클래스. s 클래스 () ',' 마이바나나이제클레스 object& 발생할 경우 # 39 를 통해 확인할 수 있습니다 '마리애플 경우' 같은 클래스 '를 통해' 로 마이바나나 객체에는 인스턴스입니다

myBanana.getClass().isInstance(myApple)

[1]: http://java.sun.com/javase/6/docs/api/java/lang/Class.html # 이신스턴스 (자바드랑드로비치)

해설 (0)

확인을 이신스턴스 부족할 것 ' ()' 에서 궁금해할까봐 실행하십시오 하게하면서요. 사용:

"' if (섬롭ject.제클레스 그레퀄스 () (c 클래스) { 뭔가 // } "'

해설 (0)