본문 바로가기

java

isAssignableFrom

Object 가 특정 타입(클래스 및 인터페이스)을 상속받았거나 구현한 경우를 체크하기 위해서는

if(obj instanceof $TargetClass.class) {

}

위와 같이 체크하면 된다.

그런데 특정 클래스가 다른 인터페이스를 구현했거나 상속받았는지를 체크하기 위해서는 어떻게 하면 될까?

상위클래스들을 모조리(java.lang.Object 가 될때까지) 찾아다니면서 구현한 Interface들을 확인하면 될것도 같은데 왠지 세련되지 않은 것 같다.

간만에 Java API document를 열어서 java.lang.Class 에 구현되어 있는 메소드 목록을 훑어 보던 중

isAssignableFrom 이라는 메소드를 발견했다. 

나의 요구사항은 사용자로부터 입력받은 클래스가 java.util.Collection 인터페이스를 (implements)구현한 클래스인지 체크하는 것이었다.

Class clazz = Class.forName(className);

boolean isCollection = java.util.Collection.class.isAssignableFrom(clazz);

위와 같이 사용하면 다음과 같은 의미로 해석된다.

java.util.Collection은 clazz로 assign할 수 있다.

다시 말해서 clazz 클래스는 java.util.Collection 인터페이스를 구현한 클래스다라는 의미가 된다.

className = "java.util.ArrayList"로 설정한 후 테스트해 보길 바란다.



ex)

String className = "java.util.ArrayList";

Class clazz = Class.forName(className);

boolean a = java.util.Collection.class.isAssignableFrom(clazz);

System.out.println(a); // true;

'java' 카테고리의 다른 글

is a has a  (0) 2015.05.15
generic 타입 추론.  (0) 2015.05.12
ThreadLocal  (0) 2015.02.25
StringUtils  (0) 2014.12.19
자바 > 크로스도메인 설정  (0) 2014.08.25