2013-05-13 2 views
0

추상 기본 클래스의 서브 클래스에서 public 속성을 반복해야합니다. 전에 이런 종류의 리플렉션을 사용했지만 이제는 수퍼 클래스에있는 필드도 검색해야합니다. 다음 메소드는 서브 클래스의 필드 만 리턴하지만 수퍼 클래스는 리턴하지 않습니다. 어떻게 기본 클래스의 멤버에도 액세스 할 수 있습니까?리플렉션을 사용하여 서브 클래스의 필드를 반복하는 방법

private <T> void inspectClass(Class<T> cls){ 
    Field[] fields = cls.getDeclaredFields(); 
    Log.d("FIELDS ARRAY", cls.toString()); 
    for(Field f : fields){ 
     Log.d("FIELD NAME", f.toString()); 
    } 
} 

고마워요!

+0

'while (Class # getSuperClass()! = null)'을 사용하여 부모 클래스를 반복하고 해당 필드를 가져옵니다. –

답변

1

이 클래스와 해당 수퍼 클래스의 공용 필드를 모두 반환하는 getFields 메서드가 있습니다.

이 클래스의 모든 필드와 해당 수퍼 클래스를 원하면 getSuperClass()을 사용하고 동일한 메소드를 호출하십시오.

@Sotirios의 의견에서 알 수 있듯이 계층 구조 전체에서이 작업을 계속 수행 할 수 있습니다.

Class<?> clazz = cls.getSuperclass(); 
    while (clazz != null) { 
     // Print fields. 
     clazz = clazz.getSuperclass(); 
    } 
1

수업의 모든 공개 입력란을 가져 오려면 getFields을 사용해야합니다. 자바 문서는 말한다 : java.lang.Class의 문서에 대한

Returns an array containing Field objects reflecting all the accessible public 
fields of the class or interface represented by this Class object. 

here.

관련 문제