反射的使用场景

前言

之前学JavaSE的时候,反射和动态代理的内容囫囵吞枣般略过,后续在工作中也没遇到直接用到反射的场景,所以对这部分内容一直很模糊

最近写一个需求,遇到了一些场景,用反射解决非常简单

场景一:

前端给我传一个对象,对象有差不多20个属性,大部分属性的类型是bigdecimal,但是属性值有可能传null
我接收到对象后需要把这些bigdecimal做个累计,但是每个属性都去做判空处理显然很蠢,百度了后发现可以用反射做

for (Field f : vo.getClass().getDeclaredFields()) { // vo就是需要处理的对象
    f.setAccessible(true);
    if (f.get(vo) == null && f.getType() == BigDecimal.class) {
        f.set(vo, BigDecimal.ZERO);
    }
}

场景二:

我需要拿到一个枚举类的所有code和desc,用map接收,也可以用反射很简洁地做出来

Class<FundSubjectEnum> clazz = FundSubjectEnum.class;
FundSubjectEnum[] enumConstants = clazz.getEnumConstants();
for (FundSubjectEnum item : enumConstants) {
    subjectMap.put(clazz.getMethod("getCode", null).invoke(item).toString(), clazz.getMethod("getDesc",  null).invoke(item).toString());
}

反射肯定不止能做这些事情,但是目前我也只遇到了这两种使用场景
希望可以在后续的工作中继续完善对这一块知识的认知,以及对后续spring源码的学习提供更好地理解

ps:写这两个功能的时候有参考这个博文里对反射方法的介绍

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值