Java 获取字段属性值的两种方法

目录

一、需求

二、方法

1.Java反射

2.转Json/Map get属性值

三、取舍


一、需求

        数百万数据(类Student),根据一定的标准计算成绩,其中标准动态变化,标准数量不固定,标准规则不固定,需要根据现有的标准计算,遂想到在每条标准添加对应Student类属性值,遍历现在的标准“动态”去取Student类的值。

二、方法

1.Java反射

传入参数名,获取对应Object,然后根据对应标准把Object转成对应类型(使用策略模式具体算成绩)。

public class Student implements Serializable {

    private int grade;
    
    private List<String> courses;

    public Object getByAttributeName(String attributeName) {
        try {
            // public属性用getField即可
            Field field = this.getClass().getDeclaredField(attributeName);
            field.setAccessible(true);
            return field.get(this);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}
Object object = student.getByAttributeName(cources);

2.转Json/Map get属性值

String attributeName = xxx;

Map map = JSON.parseObject(JSON.toJSONString(student), Map.class);

map.get(attributeName);

三、取舍

        刚开始感觉反射B格高一点,用的反射,十几个标准,十几次反射取数据,执行100条都得10秒,后来看了下getDeclaredField的底层实现,好像是循环去匹配名字,瞬间档次就下来了,于是改用转Map 然后循环标准列表 get取值,转List直接 (ArrayList) object 强转,10s大概能算到400条,当然本地测试会有误差,但是也说明些问题。最后,个体使用不具有全面性,适合自己的才是最好的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值