public Field[] getFields() throws SecurityException
이 Class 객체가 나타내는 클래스 또는 인터페이스 의 액세스 가능한 모든 공개 필드 를 반영하는 Field 객체를 포함하는 배열을 리턴 합니다. 반환 된 배열의 요소는 정렬되지 않으며 특정 순서가 아닙니다. 이 메소드는 클래스 또는 인터페이스에 액세스 가능한 공용 필드가 없거나 배열 클래스, 기본 유형 또는 void를 나타내는 경우 길이가 0 인 배열을 리턴합니다.
특히,이 Class 객체가 클래스를 나타내는 경우,이 메소드는 이 클래스와 모든 슈퍼 클래스의 공개 필드를 돌려줍니다 . 이 Class 객체가 인터페이스를 나타내는 경우,이 메소드는이 인터페이스와 모든 슈퍼 인터페이스의 필드를 돌려줍니다.
이 클래스는 배열 클래스의 암시 적 길이 필드를 반영하지 않습니다. 사용자 코드는 Array 클래스의 메소드를 사용하여 배열을 조작해야합니다.
public Field[] getDeclaredFields() throws SecurityException
이 Class 객체가 나타내는 클래스 또는 인터페이스가 선언 한 모든 필드를 반영하는 Field 객체의 배열을 리턴 합니다. 여기 에는 공개, 보호, 기본 (패키지) 액세스 및 개인 필드가 포함되지만 상속 된 필드는 제외 됩니다. 반환 된 배열의 요소는 정렬되지 않으며 특정 순서가 아닙니다. 이 메소드는 클래스 또는 인터페이스가 필드를 선언하지 않거나이 Class 객체가 기본 유형, 배열 클래스 또는 void를 나타내는 경우 길이가 0 인 배열을 리턴합니다.
모든 부모 클래스의 모든 필드가 필요한 경우 어떻게해야합니까? 일부 코드가 필요합니다 (예 : https://stackoverflow.com/a/35103361/755804) .
public static List<Field> getAllModelFields(Class aClass) {
List<Field> fields = new ArrayList<>();
do {
Collections.addAll(fields, aClass.getDeclaredFields());
aClass = aClass.getSuperclass();
} while (aClass != null);
return fields;
}
getField
수퍼 클래스에서 상속 된 필드를 얻을 수 있지만getDeclaredField
불가능합니다.getDeclaredField
함수를 호출하는 클래스로 자신을 제한하십시오.