目次
- エンティティクラスのフィールドを取得する
-
- 1. `entity.getClass().getDeclaredFields()` メソッドは、プライベート フィールドや保護されたフィールドを含む、クラスで宣言されたすべてのフィールドを返しますが、親クラスから継承されたフィールドは含まれません。
- 2. `entity.getClass().getFields()` メソッド。クラスとその親クラス内のすべてのパブリック フィールドの配列を返します。
- 3. プライベート フィールドや保護されたフィールドを含む、親クラスから継承されたすべてのフィールドを取得するには、リフレクション API の `getDeclaredFields()` メソッドを使用して、親クラスのフィールドを再帰的に取得します。
- 4.デモ
エンティティクラスのフィールドを取得する
1.entity.getClass().getDeclaredFields()
このメソッドは、プライベート フィールドや保護されたフィールドを含む、クラスで宣言されたすべてのフィールドを返しますが、親クラスから継承されたフィールドは含まれません。
2.entity.getClass().getFields()
メソッド。このメソッドは、このクラスとその親クラスのすべてのパブリック フィールドの配列を返します。
3. 親クラスから継承したすべてのフィールド (プライベート フィールドと保護されたフィールドを含む) を取得するgetDeclaredFields()
リフレクション API のメソッドを使用して、親クラスのフィールドを再帰的に取得できます。
4.デモ
以下は、リフレクション API を使用して、継承されたフィールドを含むすべてのフィールドを取得できるサンプル コードです。
import java.lang.reflect.Field;
public class Example {
public static void main(String[] args) {
// 创建一个子类对象
Child child = new Child();
// 获取子类中声明的所有字段,包括私有字段和受保护字段
Field[] declaredFields = child.getClass().getDeclaredFields();
System.out.println("子类中声明的字段:");
for (Field field : declaredFields) {
System.out.println(field.getName());
}
// 获取子类及其父类中所有公共字段
Field[] publicFields = child.getClass().getFields();
System.out.println("子类及其父类中的公共字段:");
for (Field field : publicFields) {
System.out.println(field.getName());
}
// 获取子类及其父类中所有字段,包括私有字段和受保护字段
Field[] allFields = getAllFields(child.getClass());
System.out.println("子类及其父类中的所有字段:");
for (Field field : allFields) {
System.out.println(field.getName());
}
}
// 递归获取子类及其父类中所有字段
private static Field[] getAllFields(Class<?> clazz) {
Field[] fields = clazz.getDeclaredFields();
Class<?> parent = clazz.getSuperclass();
if (parent != null) {
Field[] parentFields = getAllFields(parent);
Field[] allFields = new Field[fields.length + parentFields.length];
System.arraycopy(fields, 0, allFields, 0, fields.length);
System.arraycopy(parentFields, 0, allFields, fields.length, parentFields.length);
fields = allFields;
}
return fields;
}
}
// 父类
class Parent {
public int publicField;
protected String protectedField;
private boolean privateField;
}
// 子类
class Child extends Parent {
public double publicDoubleField;
protected Object protectedObjectField;
private byte[] privateByteArrayField;
}
出力は次のとおりです。
子类中声明的字段:
publicDoubleField
protectedObjectField
privateByteArrayField
子类及其父类中的公共字段:
publicField
子类及其父类中的所有字段:
publicDoubleField
protectedObjectField
privateByteArrayField
publicField
protectedField
privateField