[java] 런타임에 한 Java 클래스가 다른 Java 클래스를 확장하는지 테스트하는 방법은 무엇입니까?

a하위 클래스가 있는지 테스트하는 방법 은 b무엇입니까?

Class<?> a = A.class;
Class<?> b = B.class;



답변

를 찾습니까:

Super.class.isAssignableFrom(Sub.class)


답변

Class확장이 다른 확장 인지 여부를 알고 싶다면 Class # isAssignableFrom (Class)를 사용하십시오 . 예를 들면 다음과 같습니다.

if(B.class.isAssignableFrom(A.class)) { ... }

인스턴스가 특정 유형인지 여부에 관심이있는 경우 다음을 사용하십시오 instanceof.

A obj = new A();
if(obj instanceof B) { ... }

true클래스 / 인스턴스가 유형 계층의 멤버이고 직접적인 수퍼 클래스 / 서브 클래스 관계에 제한적이지 않은 경우 반환 됩니다. 예를 들면 다음과 같습니다.

// if A.class extends B.class, and B.class extends C.class
C.class.isAssignableFrom(A.class); // evaluates to true
// ...and...
new A() instanceof C; // evaluates to true

직접적인 수퍼 클래스 / 서브 클래스 관계를 확인하려면 Tim도 답변제공했습니다 .


답변

다음 b 에서 할당 가능한지 알고 싶습니다 a.

b.isAssignableFrom(a);

또한, 그것이 a직접적인 하위 클래스 인지 알고 싶다면 b:

a.getSuperclass().equals(b);


답변