2013-05-17 3 views
1

동일한 기본 유형에서 파생되는 여러 클래스가 있습니다. 기본 유형에는 서브 클래스에 공통 인 모든 구성원이 들어 있습니다. 하위 클래스가 인스턴스화되면 리플렉션을 통해 해당 멤버에 액세스해야합니다. 각 하위 클래스의 모든 멤버에 액세스해야하지만 하위 클래스에있는 멤버와 기본 클래스에있는 멤버를 분리해야합니다.리플렉션을 사용하여 java의 하위 클래스 및 수퍼 클래스 속성에 액세스

Field[] fields = objectName.getClass().getFields(); 
for(Field f : fields){ 
    Log.d("FIELD NAME", f.getName()); 
} 

나는 "서브 클래스"의 인스턴스에 포함 된 속성을 노출하는 반사를 사용하는 경우 어떻게 'FIRSTNAME'와 'LASTNAME을 차별화하는 것입니다 : 예를 들어 다음과 같이

public abstract class mainBaseClass{ 
    public String firstname; 
    public String lastname; 
} 
public class subClass extends mainBaseClass{ 
    public String property1; 
    public String property2; 
} 

을 나는 멤버에 접근하고 ''property1 '및'property2 '에서?

어떻게 구현해야할지 모르겠다. 누군가 해결책이나 어쩌면 볼 곳을 제공 할 수 있습니까? 고맙습니다! Vivian

답변

2

대신 Class#getDeclaredFields()을 사용하십시오. Java-Doc :

Class 객체가 나타내는 클래스 또는 인터페이스에 의해 선언 된 모든 필드 반사 Field 오브젝트의 배열을 반환. 여기에는 공용, 보호 된 기본값 인 (패키지) 액세스 및 개인 필드 이 포함되지만 상속 된 필드는 제외됩니다.

+0

기본 클래스의 멤버 만 반환하는 메서드가 있습니까? – Pheepster

+1

'class.getSuperclass(). getDeclaredFields()', superClass가 null이 아닌지 확인하는 것을 잊지 마라. – hoaz

관련 문제