2017-09-12 4 views
1

나는 후보 객체가 '흥미로운'지를 결정하기 위해 클래스의 배열을 반복하려합니다. A, B, C, D에는 적절한 부모 클래스가 없습니다 (형제이지만 모든 형제가 재미있는 것은 아닙니다). 부모 클래스를 추가 할 수 없으며 A, B, C, D를 수정할 수 없습니다. 아래와 같은 것을하고 싶지만 구문이 유효하지 않습니다.instanceof를 사용하여 클래스 [] 비교 반복하려고 시도

private static final Class[] types = { A.class, B.class, C.class, D.class}; 
.... 
void method(Object cand) { 
    for (Class c : types) { 
     if (cand instanceof c) {//cand is interesting, but c isn't type 
      ((c) cand).methodInInterestingClasses(); 
     } 
    } 
} 
+1

Nit : 원시 형식을 사용하지 마십시오. 'Class []'대신'List >'를 사용하십시오. –

+0

동의. 가장 빠른 데모 데모. – Gary

답변

2

당신은 컴파일 시간에 알려진 유형의 이름으로 instanceof를 사용할 수 있습니다.

if (c.isInstance(cand)) 

을 ...하지만 그건 당신이 반사와 전화를 할 것처럼 소리하는 methodInInterestingClasses() 당신을 도와 않을거야 :

당신은 Class.isInstance 방법을 사용하여 첫 번째 부분을 수정할 수 있습니다.

+0

감사합니다. 리플렉션을 사용하여 종료되었습니다. – Gary