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


답변:



84

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도 답변제공했습니다 .


2
A가 B의 서브 클래스인지 알고 싶어하기 때문에 실제로 B.class.isAssignableFrom (A.class)입니다.
meriton

1
아 그래, 내가 바꿀 게 일반적으로 예제는 다른 방법입니다 (B 확장 A).
Rob Hruska

속임수 ;-p 자세한 답변을 주셔서 감사합니다. 나는 그것이 가장 명확한 IMO이기 때문에 meriton을 받아들이고 있습니다.
Armand

42

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

b.isAssignableFrom(a);

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

a.getSuperclass().equals(b);

답변 주셔서 감사합니다 ab질문 을 사용하여 주셔서 감사합니다
Armand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.