ProgramingTip

객체가 Java의 클래스에 존재하는지 확인

bestdevel 2020. 11. 22. 20:22
반응형

객체가 Java의 클래스에 존재하는지 확인


이 질문에 이미 답변이 있습니다.

발견가 주어진 클래스에 증명 지 확인할 수있는 방법이 있습니까? 예를 들어, 할 수 있습니다

if(a.getClass() = (new MyClass()).getClass())
{
    //do something
}

그러나 이렇게하는 것은 새 객체를 즉시 인스턴스화해야합니다. "a"가 "MyClass"클래스에 존재하는 확인하는 더 좋은 방법이 있습니까?


instanceof다른 답변에서 설명 된대로 키워드는, 당신이 원하는 것이 일반적이다. 명심 instanceof돌아갑니다 true뿐만 아니라 슈퍼 클래스에 대한.

순위가 클래스의 직접 인스턴스인지 확인하는 클래스를 선택할 수 있습니다. 를 통해 인스턴스의 클래스를 얻을 수 있습니다 getClass(). .NET을 통해 특정 클래스에 정적으로 액세스 할 수 있습니다 ClassName.class.

예를 들면 다음과 같습니다.

if (a.getClass() == X.class) {
  // do something
}

의 예에서 위 a가의 인스턴스 이면보기 조건이 사실 이고의 하위 클래스 인스턴스 인 X경우 a에는 실제 아닙니다 X.

비교 :

if (a instanceof X) {
    // do something
  }

에서는 instanceof, 조건은 참 a의 인스턴스 인 X경우 또는 a(A)의 인스턴스이며 서브 클래스X.

대부분의 경우 instanceof옳습니다.


이 작업을 동적으로 수행해야하는 경우 다음을 사용할 수 있습니다.

if (clazz.isInstance(a)) {
      // do something
}

clazz의 인스턴스는 어디에 있습니까?Class


instanceof연산자 사용 :

if(a instanceof MyClass)
{
    //do something
}

운영자를 시도하십시오 instanceof.


instanceof이미 언급 된 한 사용에 동의합니다 .

사용의 또 다른 이점은와 instanceof함께 사용할 때이다 null참조 instanceof의지 복귀 false, 동안이 a.getClass()를 던질 것입니다 NullPointerException.


일반적인 방법은 다음과 가변합니다.

if (a instanceof A)

그러나 A일반 인수에서 와 같이이를 수행 할 수없는 경우가 있습니다 .

Java의 유형 삭제로 인해

<A> boolean someMethod(Object a) {
    if (a instanceof A)
    ...
}

다음은 작동하지 unchecked cast경고 를 생성합니다 .

<A> void someMethod(Object a) {
    try {
        A casted = (A)a;    
    } catch (ClassCastException e) {
         ...
    }
}

A런타임 A에는 기본적으로 이므로 캐스트 할 수 없습니다 Object.

경우에, 대한 이러한 해결책 Class은 또는 일반 인수 대신를 사용하는 을 구석으로입니다.

void someMethod(Object a, Class<A> aClass) {
    if (aClass.isInstance(a)) {
       A casted = aClass.cast(a);
       ...
    }
}

그런 다음 메서드를 다음과 같이 호출 할 수 있습니다.

someMethod(myInstance, MyClass.class);
someMethod(myInstance, OtherClass.class);

참고 URL : https://stackoverflow.com/questions/4294844/check-if-an-object-belongs-to-a-class-in-java

반응형