通过反射拿到某个类以及其所有父类的信息思路

通过反射拿到某个类以及其所有父类的信息思路

1.简介:
在日常开发中可能会遇到需要将当前的类的对象的父类及其父类的父类的信息导出使用,我们可以用反射去实现。
2.代码思路:

    public static void show(Object a) {
        //拿到a的反射类
        Class clazz = a.getClass();
        //拿到a的所有父类信息,判断指标,当父类是object时
        while (clazz.getSuperclass() != Object.class) {
            try {
                //拿到每一代父类的信息
                clazz = clazz.getSuperclass();
                //拿到当前父类的属性名
                Field[] fields = clazz.getDeclaredFields();
                for (Field f : fields
                ) {
                    //打开私有访问权限
                    f.setAccessible(true);
                    System.out.println("父类的属性名:" + f.getName() + ";属性值:" + f.get(a));
                }
            } catch (Exception e) {
                e.getMessage();
            }
        }
    }

其他相关测试代码:

public class Aentity extends SuperAentity implements Serializable {
    private static final long serialVersionUID=1L;

    @JsonProperty(value = "name")
    private String nameA;

    @JsonProperty(value = "age")
    private Integer ageA;
    @Property(name = "11111")
    private String addressA;

    public String getNameA() {
        return nameA;
    }

    public void setNameA(String nameA) {
        this.nameA = nameA;
    }

    public Integer getAgeA() {
        return ageA;
    }

    public void setAgeA(Integer ageA) {
        this.ageA = ageA;
    }

    public String getAddressA() {
        return addressA;
    }

    public void setAddressA(String addressA) {
        this.addressA = addressA;
    }
}
//
public class SuperAentity extends SuperSuperentity implements Serializable {
    private static final long serialVersionUID=1L;

    public String nameF="我是父类的name名字";
    private Integer ageF=18;

    public String getNameF() {
        return nameF;
    }

    public void setNameF(String nameF) {
        this.nameF = nameF;
    }

    public Integer getAgeF() {
        return ageF;
    }

    public void setAgeF(Integer ageF) {
        this.ageF = ageF;
    }
}

///
public class SuperSuperentity implements Serializable {
    private static final long serialVersionUID=1L;
    private String nameSuper="我是超级父类";

}

测试代码:

public class Test1 {
    public static void main(String[] args) {
        Aentity aentity=new Aentity();
//        Bentity bentity=new Bentity();
        aentity.setNameA("aaa");
        aentity.setAgeA(16);
        aentity.setAddressA("这是a的地址");
//        bentity.setNameB("bbb");
//        bentity.setAddressB("这是b的地址");
//        bentity.setAgeB(17);
//        bentity.setEmail("1234567890");
        Test1.show(aentity);
    }


    public static void show(Object a) {
        //拿到a的反射类
        Class clazz = a.getClass();
        //拿到a的所有父类信息,判断指标,当父类是object时
        while (clazz.getSuperclass() != Object.class) {
            try {
                //拿到每一代父类的信息
                clazz = clazz.getSuperclass();
                //拿到当前父类的属性名
                Field[] fields = clazz.getDeclaredFields();
                for (Field f : fields
                ) {
                    //打开私有访问权限
                    f.setAccessible(true);
                    System.out.println("父类的属性名:" + f.getName() + ";属性值:" + f.get(a));
                }
            } catch (Exception e) {
                e.getMessage();
            }
        }
    }
}

测试结果:
在这里插入图片描述
3.总结:这个代码中最精华的地方就是判断找到所有父类的指标:所有的类的最终父类都是Object类!,真的,Java的这个设置太巧妙了!!!我之前一直卡在找不到判断找到所有父类的指标,无法控制他的遍历解析次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值