今天做一个导出excel的功能,需要导出八九十个字段,然后发觉一个字段报空指针异常,遂改用三元运算符,

cell2.setCellValue(prpSsalaries.get(i).getFixedSalary()==null?"0":prpSsalaries.get(i).getFixedSalary().toString());

后来发觉很多BigDecimal字段都为空,然后导出的时候报空指针异常,想想不可能这八九十个字段都加判断吧,然后就写了一个工具类,用来转换 Long,BigDecimal为空的(double默认为0,因此可以忽略),默认为0处理,创建一个辅助类,用于测试,代码如下:

import java.math.BigDecimal;
/*** Created by hanjun on 2020/5/28.*/public class Test {private Long Id;private String name;private BigDecimal basicSalary;private BigDecimal notzero=new BigDecimal(1);private double salaryAdd;public Long getId() {return Id;}public void setId(Long id) {Id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public BigDecimal getBasicSalary() {return basicSalary;}public void setBasicSalary(BigDecimal basicSalary) {this.basicSalary = basicSalary;}public double getSalaryAdd() {return salaryAdd;}public void setSalaryAdd(double salaryAdd) {this.salaryAdd = salaryAdd;}public BigDecimal getNotzero() {return notzero;}public void setNotzero(BigDecimal notzero) {this.notzero = notzero;}
}
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
/*** Created by hanjun on 2020/5/28.*/
public class NoZeroUtil {public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{Test aa=new Test();System.out.println("name:"+aa.getName());System.out.println("salaryAdd:"+aa.getSalaryAdd());System.out.println("basicSalary:"+aa.getBasicSalary());System.out.println("id:"+aa.getId());System.out.println("notzero:"+aa.getNotzero());getbig(aa);System.out.println("处理后为name:"+aa.getName());System.out.println("处理后为salaryAdd:"+aa.getSalaryAdd());System.out.println("处理后为basicSalary:"+aa.getBasicSalary());System.out.println("处理后为id:"+aa.getId());System.out.println("处理后notzero为:"+aa.getNotzero());}public  static void  getbig( Object object) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{Field[] f=object.getClass().getDeclaredFields();for(int i=0;i<f.length;i++){//获取属相名String attributeName=f[i].getName();//将属性名的首字母变为大写,为执行set/get方法做准备String methodName=attributeName.substring(0,1).toUpperCase()+attributeName.substring(1);try{if(f[i].getType()==BigDecimal.class&&getFieldValueByName(f[i].getName(), object)==null){//获取属性类型,并且为空(不为空的当然不用赋值了,不然传进来对象有值属性都赋值为0,那不得搞你人)Method setMethod=object.getClass().getMethod("set"+methodName,BigDecimal.class);setMethod.invoke(object,new BigDecimal(0));}else if(f[i].getType()==Long.class&&getFieldValueByName(f[i].getName(), object)==null){Method setMethod=object.getClass().getMethod("set"+methodName,Long.class);setMethod.invoke(object,0L);} }catch (NoSuchMethodException e) {e.printStackTrace();}} } //获取对象值private static Object getFieldValueByName(String fieldName, Object o) {  try {    String firstLetter = fieldName.substring(0, 1).toUpperCase();    String getter = "get" + firstLetter + fieldName.substring(1);    Method method = o.getClass().getMethod(getter, new Class[] {});    Object value = method.invoke(o, new Object[] {});    return value;    } catch (Exception e) {    e.printStackTrace();return null;    }    }  }

运行结果为:可以看出double类型会默认为0,因此不用赋值,但是BigDecimal类型默认为空,使用过之后对象属性就不会报空指针异常了

java遍历类属性,并给字段赋值相关推荐

  1. java 遍历类属性_Java 遍历类中的属性

    public static void testReflect(Object model) throwsNoSuchMethodException, IllegalAccessException, Il ...

  2. java遍历一个类的属性名,java遍历对象属性

    java对象动态添加属性,Class对象和Java反射机制,java遍历对象属性,js对象动态添加属性 java 对象动态添加属性,Class对象和Java反射机制,java遍历对象属性,js对象动态 ...

  3. 如何配置数据库带有下划线字段对应Java实体类属性(驼峰命名)

    一般开发中,数据库字段设计推荐使用下划线(u_name),Java实体类属性使用驼峰命名(uName),为了能使数据库字段与Java实体类属性一一映射,需要做一下的配置,这里我用的是spring bo ...

  4. 实体类属性与数据库字段不一致

    实体类属性与数据库字段不一致 1 问题描述 使用Mybatis时,Mybatis根据数据库的字段找到对应实体类的属性,通过set方法对属性进行注入. 如果实体类的属性名和数据库的字段名不相同,可以发现 ...

  5. java循环遍历类属性_java循环遍历类属性 get 和set值方法

    //遍历sqspb类 成员为String类型 属性为空的全部替换为"/" Field[] fields = sqspb.getClass().getDeclaredFields() ...

  6. java遍历类中所有字段

    代码: //遍历类中所有字段信息 https://blog.csdn.net/weixin_34346099/article/details/94036015public static void re ...

  7. java定义类属性方法_java定义类、属性、方法

    Java是面向对象的程序设计语言,Java语言提供了定义类.定义属性.方法等最基本的功能.类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将会引用到类的对 ...

  8. java 类大写_记java实体类属性名为全部为大写踩的坑(基础)

    1.今天后台使用实体类接收参数,然后有个参数发现明明前后都是对应的,但是那个属性偏偏的不到数据 后面百度才知道(写前端太久java基础都给忘了,该补补了) spring默认的命名方式为,首字母转小写, ...

  9. java 实体类返回大写_记java实体类属性名为全部为大写踩的坑(基础)

    1.今天后台使用实体类接收参数,然后有个参数发现明明前后都是对应的,但是那个属性偏偏的不到数据 后面百度才知道(写前端太久java基础都给忘了,该补补了) spring默认的命名方式为,首字母转小写, ...

最新文章

  1. silverlight4.0 写文件不能设置默认文件名
  2. 第八周项目实践2 建立连串算法库
  3. 5. 连续时间马氏过程-强Markov族
  4. Java学习(三)面向对象异常
  5. ios和android交互差异,Android 和 iOS 主要交互区别整理
  6. Leaflet文档阅读笔记-Leaflet on Mobile笔记
  7. 怎么查电脑系统版本_查中考分数线小程序功能更新,填志愿必备参考
  8. linux yum 链接,Linux YUM之YUM仓库
  9. c均值聚类matlab程序_聚类算法之kmeans算法
  10. 代码制作数字流星雨_js代码实现流星雨
  11. 计算机视觉领域的一些牛人博客,超有实力的研究机构web主页
  12. html 规定输入框必须输入
  13. mysql frm 修复_使用mysqlfrm恢复frm表结构
  14. 【书法】楷书-颜体 vs 欧体
  15. IDEA 一直卡在Buil(编译 write classes)报错资源不足
  16. 稳压二极管串联电阻计算
  17. 寒假的比较无聊的小程序
  18. 2023年全国最新会计专业技术资格精选真题及答案20
  19. 改变程序黑窗口的背景和字体颜色
  20. 【线上实习项目】大拿老师助力你的校招

热门文章

  1. 谈用伪静态(url重写)的方法替代生成静态页面的好处
  2. 遗传算法解决八皇后问题
  3. CPU是如何执行程序的?
  4. 【洛谷3345_BZOJ3924】[ZJOI2015]幻想乡战略游戏(点分树)
  5. 如何用PHP代码分析dat文件,dat文件分析解密工具怎么操作
  6. python plt legend并排,matplotlib Legend 图例用法
  7. 解决javax.naming.NameNotFoundException
  8. 后续学习计划(持续完善)
  9. scrach少儿编程网站精选(个人建议)
  10. ebay注册流程_2017年eBay注册开店流程图文详解