1 问题复现
1.1 问题
实体(JavaBean规范)赋值时,抛出异常。
1.2 原因
使用基础类型定义属性,当使用null给属性赋值时,抛出异常。
2 Java Bean
package com.monkey.java_study.common.entity;
/**
* 数字实体:测试基础类型和包装类型.
*
* @author xindaqi
* @date 2021-11-08 17:32
*/
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;
}
@Override
public String toString() {
return "DigitalEntity{" +
"a=" + a +
", b=" + b +
'}';
}
}
3 测试
3.1 基础类型
为基础类型赋值null,测试样例如下:
/**
* 基础类型填充数据
*/
@Test
public void basicTypeTest() {
DigitalEntity digitalEntity = new DigitalEntity();
Map<String, Double> map = new HashMap<>();
map.put("1", null);
digitalEntity.setA(map.get("1"));
}
测试结果如下,由结果可知,为基础类型赋值null时,直接抛出异常。
3.2 包装类型
为包装类型赋值null,测试样例如下:
/**
* 包装类型填充数据
*/
@Test
public void wrappedTypeTest() {
DigitalEntity digitalEntity = new DigitalEntity();
Map<String, Double> map = new HashMap<>();
map.put("1", null);
digitalEntity.setB(map.get("1"));
Double b = digitalEntity.getB();
System.out.println(">>>>>>>>>Double b:" + b);
}
测试结果入下,由结果可知,为包装类型赋值null时,不会抛出异常,只是属性值为null,在使用值时,需要做判断。
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;
/**
* 基础数据类型与包装数据类型测试.
*
* @author xindaqi
* @date 2021-11-08 17:33
*/
public class DigitalTest {
private static final Logger logger = LogManager.getLogger(DigitalTest.class);
/**
* 基础类型填充数据
*/
@Test
public void basicTypeTest() {
DigitalEntity digitalEntity = new DigitalEntity();
Map<String, Double> map = new HashMap<>();
map.put("1", null);
digitalEntity.setA(map.get("1"));
}
/**
* 包装类型填充数据
*/
@Test
public void wrappedTypeTest() {
DigitalEntity digitalEntity = new DigitalEntity();
Map<String, Double> map = new HashMap<>();
map.put("1", null);
digitalEntity.setB(map.get("1"));
Double b = digitalEntity.getB();
System.out.println(">>>>>>>>>Double b:" + b);
}
}
5 小结
- 使用JavaBean规范定义实体时,属性使用包装类型;
- 包装类型的数据使用时,特别是数字类型的包装类型,需要判断是否为null。