通过反射获取实体类的字段(包含父类)

首先创建三个实体类,关系为依次继承

@Data
public class GrandFather {
    //私有
    private String grandFatherName;
    //受保护的
    protected String grandFatherAge;
    //公共的
    public String grandFatherSex;
    //无修饰
    String grandFatherAddress;
}
@Data
public class Father extends GrandFather{
    //私有
    private String fatherName;
    //受保护的
    protected String fatherAge;
    //公共的
    public String fatherSex;
    //无修饰
    String fatherAddress;
}
@Data
public class Son extends Father{
    //私有
    private String sonName;
    //受保护的
    protected String sonAge;
    //公共的
    public String sonSex;
    //无修饰
    String sonAddress;
}

getDeclaredFields()返回当前类的所有属性,不包含所继承类的属性

Field[] fields = Son.class.getDeclaredFields();
private java.lang.String com.qingnian.fanshe.domain.Son.sonName
protected java.lang.String com.qingnian.fanshe.domain.Son.sonAge
public java.lang.String com.qingnian.fanshe.domain.Son.sonSex
java.lang.String com.qingnian.fanshe.domain.Son.sonAddress

getFields()可获取当前类,以及所继承所有父类,父父类的公共属性

Field[] fields = Son.class.getFields();
public java.lang.String com.qingnian.fanshe.domain.Son.sonSex
public java.lang.String com.qingnian.fanshe.domain.Father.fatherSex
public java.lang.String com.qingnian.fanshe.domain.GrandFather.grandFatherSex

获取所有继承类全部属性的方法:

private static List<Field> getAllField(Object model) {
        Class clazz = model.getClass();
        List<Field> fields = new ArrayList<>();
        //只要父类存在,就获取其类的属性到集合
        while (clazz != null) {
            fields.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
            //获取其父类
            clazz = clazz.getSuperclass();
        }
        return fields;
    }
private java.lang.String com.qingnian.fanshe.domain.Son.sonName
protected java.lang.String com.qingnian.fanshe.domain.Son.sonAge
public java.lang.String com.qingnian.fanshe.domain.Son.sonSex
java.lang.String com.qingnian.fanshe.domain.Son.sonAddress
private java.lang.String com.qingnian.fanshe.domain.Father.fatherName
protected java.lang.String com.qingnian.fanshe.domain.Father.fatherAge
public java.lang.String com.qingnian.fanshe.domain.Father.fatherSex
java.lang.String com.qingnian.fanshe.domain.Father.fatherAddress
private java.lang.String com.qingnian.fanshe.domain.GrandFather.grandFatherName
protected java.lang.String com.qingnian.fanshe.domain.GrandFather.grandFatherAge
public java.lang.String com.qingnian.fanshe.domain.GrandFather.grandFatherSex
java.lang.String com.qingnian.fanshe.domain.GrandFather.grandFatherAddress
发布了27 篇原创文章 · 获赞 1 · 访问量 848

猜你喜欢

转载自blog.csdn.net/weixin_44971379/article/details/104910542
今日推荐