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
関数を呼び出すクラスに制限されます。