1 问题复现
1.1 问题
实体(JavaBean规范)赋值时,抛出异常。
1.2 原因
使用基础类型定义属性,当使用null给属性赋值时,抛出异常。
2 Java Bean
package com.monkey.java_study.common.entity;
public class DigitalEntity {private double a;private Double b;public DigitalEntity() {}public double getA() {return a;}public void setA(double a) {this.a = a;}public Double getB() {return b;}public void setB(Double b) {this.b = b;}@Overridepublic String toString() {return "DigitalEntity{" +"a=" + a +", b=" + b +'}';}
}
3 测试
3.1 基础类型
为基础类型赋值null,测试样例如下:
&#64;Testpublic void basicTypeTest() {DigitalEntity digitalEntity &#61; new DigitalEntity();Map<String, Double> map &#61; new HashMap<>();map.put("1", null);digitalEntity.setA(map.get("1"));}
测试结果如下&#xff0c;由结果可知&#xff0c;为基础类型赋值null时&#xff0c;直接抛出异常。
3.2 包装类型
为包装类型赋值null&#xff0c;测试样例如下&#xff1a;
&#64;Testpublic void wrappedTypeTest() {DigitalEntity digitalEntity &#61; new DigitalEntity();Map<String, Double> map &#61; new HashMap<>();map.put("1", null);digitalEntity.setB(map.get("1"));Double b &#61; digitalEntity.getB();System.out.println(">>>>>>>>>Double b:" &#43; b);}
测试结果入下&#xff0c;由结果可知&#xff0c;为包装类型赋值null时&#xff0c;不会抛出异常&#xff0c;只是属性值为null&#xff0c;在使用值时&#xff0c;需要做判断。
4 完整样例
package com.monkey.java_study.functiontest;import com.monkey.java_study.common.entity.DigitalEntity;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;import java.util.HashMap;
import java.util.Map;
public class DigitalTest {private static final Logger logger &#61; LogManager.getLogger(DigitalTest.class);&#64;Testpublic void basicTypeTest() {DigitalEntity digitalEntity &#61; new DigitalEntity();Map<String, Double> map &#61; new HashMap<>();map.put("1", null);digitalEntity.setA(map.get("1"));}&#64;Testpublic void wrappedTypeTest() {DigitalEntity digitalEntity &#61; new DigitalEntity();Map<String, Double> map &#61; new HashMap<>();map.put("1", null);digitalEntity.setB(map.get("1"));Double b &#61; digitalEntity.getB();System.out.println(">>>>>>>>>Double b:" &#43; b);}
}
5 小结
- 使用JavaBean规范定义实体时&#xff0c;属性使用包装类型&#xff1b;
- 包装类型的数据使用时&#xff0c;特别是数字类型的包装类型&#xff0c;需要判断是否为null。