问题:java对象接受从数据库查出来的数据时,对对象的某一属性进行操作,在操作属性中存储的数据中不对进行检查,会出现空指针异常的情况。
问题再现:新建一个实体类
public class Student { private Integer id; private String name; private String age; private String course; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } }
讯享网
进行测试
讯享网 @Test public void test(){ //数据模拟 Student student = new Student(); student.setId(1); student.setName("张三"); student.setAge("12"); //这里不对course属性赋值 // student.setCourse("语文,数学,英语"); System.out.println(student.getId()); System.out.println(student.getName()); System.out.println(student.getAge()); System.out.println(student.getCourse()); }
输出内容:
1
张三
12
null
对course属性进行操作
@Test public void test(){ //数据模拟 Student student = new Student(); student.setId(1); student.setName("张三"); student.setAge("12"); //这里不对course属性赋值 // student.setCourse("语文,数学,英语"); System.out.println(student.getCourse().length()); }
这里就会报异常
讯享网
通过这里看以看出,取出实体类中的数据是没问题的,但当我们对course属性进行操作时,就会包空指针异常。
讯享网public class ObjectUtil { / * 判断对象中部分属性值是否不为空 * * @param object 对象 * @param excludeFieldNames 选择校验的属性名称List集合 * @return */ public static boolean checkObjFieldsIsNotNull(Object object, List<String> excludeFieldNames) { if (null == object) { return false; } try { for (Field f : object.getClass().getDeclaredFields()) { f.setAccessible(true); if (excludeFieldNames.contains(f.getName()) && f.get(object) != null && StringUtils.isNotBlank(f.get(object).toString())) { return true; } } } catch (Exception e) { e.printStackTrace(); } return false; } }
使用工具类进行判断:
@Test public void test(){ //数据模拟 Student student = new Student(); student.setId(1); student.setName("张三"); student.setAge("12"); //这里不对course属性赋值 // student.setCourse("语文,数学,英语"); //当course属性为空时 System.out.println("执行开始"); if (ObjectUtil.checkObjFieldsIsNotNull(student,Arrays.asList("course"))){ System.out.println("执行"); System.out.println(student.getCourse().length()); } System.out.println("执行完毕"); }
输出结果:


从这里可以看出if条件为空,并没有执行,因为此时course属性为空,判断不成立。
当course属性不为空时:
讯享网 @Test public void test(){ //数据模拟 Student student = new Student(); student.setId(1); student.setName("张三"); student.setAge("12"); student.setCourse("语文,数学,英语"); System.out.println("执行开始"); if (ObjectUtil.checkObjFieldsIsNotNull(student,Arrays.asList("course"))){ System.out.println("执行"); System.out.println(student.getCourse().length()); } System.out.println("执行完毕"); }
执行结果:

可以看出:当属性不为空时,判断为真。 此时我们就完成了对属性是否为空的判断。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/30292.html