问题: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;}
}

进行测试

    @Testpublic 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属性进行操作

    @Testpublic 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;}}

使用工具类进行判断:

    @Testpublic 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属性不为空时:

    @Testpublic 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("执行完毕");}

执行结果:

可以看出:当属性不为空时,判断为真。 此时我们就完成了对属性是否为空的判断。

java中判断对象中某个属性是否为空相关推荐

  1. 判断对象的某些属性是否为空

    背景:很多时候我们需要判断对象的某些属性中的值是否为空,然后进行操作,这里不需要整个的对象,只是需要获取对象中的某些属性进行判断,如果写很多的if进行判断,例如: if (StringUtils.is ...

  2. 判断对象内的 属性是否为空

    看一下需求: 在接收前端传参的时候,如果没有传数据,那么会是所有的属性都为 null,这时候进行判断参数是否为空 就不能单纯的 使用 param == null 来判断了 import java.la ...

  3. 判断对象中属性值是否全为空

    import java.lang.reflect.Field; /*** 判断对象中属性值是否全为空** @param object* @return*/public static boolean c ...

  4. java判断一个对象是否为空_Java中判断对象是否为空的方法的详解

    首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一种是org.springframework.util包下的.这两种StringU ...

  5. php查询对象是否有某个属性可用,JavaScript 判断对象中是否有某属性的常用方法...

    判断对象中是否有某属性的常见方式总结,不同的场景要使用不同的方式. 一.点( . )或者方括号( [ ] ) 通过点或者方括号可以获取对象的属性值,如果对象上不存在该属性,则会返回undefined. ...

  6. java 判断对象中所有属性都为空

    /*** 判断对象中的属性是否全为null** @param o* @return 全为空返回true*/public boolean allFieldIsNULL(Object o) {try {f ...

  7. java怎么判断对象为空_java中怎么判断对象是否为空

    java中判断对象是否为空的方法: 首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的:另一种是org.springframework.u ...

  8. js之删除对象属性的三种方法 判断对象中是否有某一属性的四种方法

    js之删除对象属性的三种方法 & 判断对象中是否有某一属性的四种方法 示例 1.基础版 var a = { id: 18, age: 20, name: "zhangsan" ...

  9. java if equals_Java中判断对象是否相等的equals()方法使用教程

    Object类中的equals方法用于检测一个对象是否等于另一个对象.在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为默认 ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装批量图片处理器XnConvert
  2. IntelliJ IDEA 添加本地xsd文件
  3. 一大波数据来袭 网络桃色陷阱暗藏致命危机
  4. python对文件的读操作方法有哪些-Python中文件的读取和写入操作
  5. dedecms织梦专题节点列表内容怎么实现分页
  6. Python中的负索引是什么?
  7. c#启动EXE文件(简单的)
  8. 直播预告 | TCCI追问研讨会第二期:双向脑机接口如何实现?
  9. 简单的TensorFlow分类教程
  10. mapreduce分组统计_mongodb中使用mapreduce进行分组统计
  11. MYSQL5.7---ONLY_FULL_GROUP_BY 异常处理
  12. 年终感想——财务自由的程序员,你见过吗?
  13. 四川省盐业学校九五计算机,2020年四川省盐业学校招生录取分数线
  14. gitee添加成员_成员权限管理,到底能有多精细?
  15. Diagrams for Mac(原生流程图制作工具)
  16. CentOS镜像中替换安装镜像的小系统的内核方法
  17. 机器学习 --- 3. 贝叶斯怎么想?(转)
  18. 教材寻找 下载系列1
  19. 如何利用PyTorch实现一个Encoder-Decoder结构进行英法互译
  20. r5 5500参数 r5 5500有核显吗 锐龙r5 5500相当于i几

热门文章

  1. Excel做一个类似QQ登录窗口
  2. 涂抹果酱_2015年全球游戏果酱
  3. PC 端微信逆向分析
  4. 非全日制大专怎么考全日制本科
  5. Ubuntu安装阿里云国内源
  6. 怎么用VLOOKUP来匹配excel表里面的数据
  7. 什么是外键,外键的作用
  8. 前端工程师必须知道的网络知识(一)
  9. 一个意外错误使您无法复制该文件。
  10. 元宇宙四象限是什么?线上应用、线下应用、虚拟世界、镜像世界?