目录
获取entity类中的字段
1.entity.getClass().getDeclaredFields()
方法返回的是该类中声明的所有字段,包括私有字段和受保护字段,但不包括继承自父类的字段。
2. entity.getClass().getFields()
方法,该方法返回的是该类及其父类中所有公共字段的数组。
3.获取继承自父类的所有字段,包括私有字段和受保护字段,可以使用反射 API 中的 getDeclaredFields()
方法来递归获取父类的字段。
4.demo
以下是一个示例代码,可以使用反射 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