当前位置:   article > 正文

Java NullPointerException: null问题3种情况(Java、Dubbo、EasyExcel)解决

nullpointerexception: null

1 问题描述

java.lang.NullPointerException: null

2 问题分析

2.1 Java

1、使用了equals()方法,但是使用了该方法的变量为null,导致报错。

解决办法:

  1. String str=null;
  2. if(str!=null&&str.equals("0")){
  3. return true;
  4. }
  5. return false;

2、包装类转基本类型时,包装类为null,导致报错。

解决办法:

包装类转基本类型之前先判断包装类是否为null。

  1. Integer num1 = null;
  2. if(num1 != null){
  3. int num2 = num1;
  4. }

3、包装类和基本类型比较时,包装类为null,导致报错。

解决办法:

包装类和基本类型比较之前先判断包装类是否为null。

  1. Integer num1 = null;
  2. int num2 = 1;
  3. bool flag = num1 != null && num1 == num2 ? true : false;

4、使用switch语句时,传参为null,导致报错。

  1. Integer int1 = null;
  2. switch (int1) {
  3. case 1:
  4. break;
  5. default:
  6. break;
  7. }

解决办法:

使用switch语句之前判断传参是否为null。

  1. Integer int1 = null;
  2. if(int1 == null){
  3. return;
  4. }
  5. switch (int1) {
  6. case 1:
  7. break;
  8. default:
  9. break;
  10. }

5、使用contains()方法时,调用contains()方法的变量或contain()传参为null。

  1. String str1 = null;
  2. String str2 = null;
  3. return str1.contains(str2);

 解决办法:

使用contains()方法之前判断调用contains()方法的变量或contain()传参是否为null。

  1. String str1 = null;
  2. String str2 = null;
  3. if (str1 == null || str2 == null) {
  4. return false;
  5. }
  6. return str1.contains(str2);

6、三元运算符的返回值同时包含包装类和基本类型时,会将包装类型转换为基本类型,包装类型为null时会报错。

  1. Integer test1 = null;
  2. Integer test2 = null;
  3. //拆箱后变为Integer result = test1 == null ? test2.intValue() : test1.intValue();
  4. Integer result = test1 == null ? test2 : test1.intValue();

解决办法:

三元运算符的返回值全部变为基本类型,或者将有可能为null的包装类型改为直接返回null。

  1. Integer test1 = null;
  2. Integer test2 = null;
  3. //返回值全部变为基本类型
  4. Integer result = test1 == null ? 0: test1.intValue();
  5. //改为直接返回null
  6. Integer result = test1 == null ? null: test1.intValue();

7、使用Collectors.summarizingInt()、Collectors.summingLong()、Collectors.summingDouble()进行求和时,进行求和的属性值存在为null的情况。

  1. List<Integer> list=new ArrayList<>();
  2. long sum = list.stream().collect(Collectors.summingInt(x -> x));

解决办法:

属性值为null设置默认值即可。

  1. List<Integer> list=new ArrayList<>();
  2. long sum = list.stream().collect(Collectors.summingInt(x -> x == null ? 0 : x));

8、使用Float.parseFloat()、Float.valueOf()、Double.parseDouble()、Double.valueOf()等方法将字符串转换成对应的基本类型时,传参为null,导致报错。 

  1. String str = null;
  2. Float.parseFloat(str);
  3. Float.valueOf(str);
  4. Double.parseDouble(str);
  5. Double.valueOf(str);

解决办法:

        在使用Float.parseFloat()、Float.valueOf()、Double.parseDouble()、Double.valueOf()等方法之前,先用StrUtil.isNotEmpty()判断传参是否为null或空字符

  1. String str = null;
  2. Float num1 = StrUtil.isNotEmpty(str) ? Float.parseFloat(str) : null;
  3. Float num2 = StrUtil.isNotEmpty(str) ? Float.valueOf(str) : null;
  4. Double num3 = StrUtil.isNotEmpty(str) ? Double.parseDouble(str) : null;
  5. Double num4 = StrUtil.isNotEmpty(str) ? Double.valueOf(str) : null;

注:

        StrUtil.isNotEmpty()方法需要引入Hutool依赖。

Hutool Java工具类库使用_旭东怪的博客-CSDN博客1 简介Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。https://blog.csdn.net/qq_38974638/article/details/112977621

2.2 Dubbo

1、引用其他微服务时使用了jdk.nashorn.internal.ir.annotations.Reference注解,导致装配失败,@Reference对应的类为null。

解决办法:

将jdk.nashorn.internal.ir.annotations.Reference换成org.apache.dubbo.config.annotation.Reference。

import org.apache.dubbo.config.annotation.Reference;

2.3 EasyExcel

1、使用ExcelWriter.write(List data, WriteSheet writeSheet, WriteTable writeTable)写数据时,writeTable的List<List<String>> head属性中的元素包含null,导致报错。

问题解决:

使用WriteTable.setHead(List<List<String>> head)方法给head赋值之前,将赋值List中的null全部变为空字符。

  1. WriteTable table = new WriteTable();
  2. table.setTableNo(1);
  3. List<List<String>> head = new ArrayList<>();
  4. for (int i = 0; i < head.size(); i++) {
  5. List<String> rowList = head.get(i);
  6. for (int j = 0; j < rowList.size(); j++) {
  7. if (rowList.get(j) == null) {
  8. rowList.set(j, "");
  9. }
  10. }
  11. }
  12. table.setHead(head );

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/274507?site
推荐阅读
相关标签
  

闽ICP备14008679号