当前位置:   article > 正文

java判断空_Java判断对象是否为NULL

java判断对象是否为null和空

Java使用反射判断对象是否为NULL

判断Java对象是否为null可以有两层含义:

第一层:  直接使用 object == null 去判断,对象为null的时候返回true,不为null的时候返回false。

第二层:在object != null 为true的情况 下,进一步去判断对象的所有属性是否为null。

被判断的Java对象: User (User.java)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.chinalife.utils;importjava.util.List;public classUser {private String name; //姓名

private String age; //年龄

private String sex; //性别

private List hobbies; //爱好

private boolean isStudent; //是否是学生

publicUser(){}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicString getAge() {returnage;

}public voidsetAge(String age) {this.age =age;

}publicString getSex() {returnsex;

}public voidsetSex(String sex) {this.sex =sex;

}public ListgetHobbies() {returnhobbies;

}public void setHobbies(Listhobbies) {this.hobbies =hobbies;

}public booleanisStudent() {returnisStudent;

}public void setStudent(booleanisStudent) {this.isStudent =isStudent;

}

}

View Code

一、简单判断:

//判断1 : 这里会返回 true

User user = null;if(user == null){return true;

}else{return false;

}

//判断2 : 这里会返回 false

User user= newUser();if(user == null){return true;

}else{return false;

}

原因: User user = new User(); 这时候已经创建了一个对象,所以user不会为null

以上示例比较简单,一目了然,看起来没有任何问题。

"但是其实当你需要判断的对象为前端传过来的对象时,单纯的使用 object == null 去判断是不够的,因为前端传过来的对象会是判断2 的样子。

对象不为null,但是对象的所有属性均为null。[boolean类型除外,以及序列化值除外,可能还有其他特殊值~ 欢迎补充哟] "

二、进一步判断:

创建Util类,使用反射对对象的属性进行判断

CheckObjectIsNullUtils.java

packagecom.chinalife.proposal.common.util;importjava.lang.reflect.Field;importjava.lang.reflect.Type;/***

Description: 判断对象是否为空,进一步判断对象中的属性是否都为空

*@authorduanfeixia

* @date 2018年11月12日*/

public classCheckObjectIsNullUtils {/*** 判断对象是否为空,且对象的所有属性都为空

* ps: boolean类型会有默认值false 判断结果不会为null 会影响判断结果

* 序列化的默认值也会影响判断结果

*@paramobject

*@return

*/

public booleanobjCheckIsNull(Object object){

Class clazz= (Class)object.getClass(); //得到类对象

Field fields[] = clazz.getDeclaredFields(); //得到所有属性

boolean flag = true; //定义返回结果,默认为true

for(Field field : fields){

field.setAccessible(true);

Object fieldValue= null;try{

fieldValue= field.get(object); //得到属性值

Type fieldType =field.getGenericType();//得到属性类型

String fieldName = field.getName(); //得到属性名

System.out.println("属性类型:"+fieldType+",属性名:"+fieldName+",属性值:"+fieldValue);

}catch(IllegalArgumentException e) {

e.printStackTrace();

}catch(IllegalAccessException e) {

e.printStackTrace();

}if(fieldValue != null){ //只要有一个属性值不为null 就返回false 表示对象不为null

flag= false;break;

}

}returnflag;

}

}

1>>>首先我们测试一个含有boolean类型属性的对象判断  (被判断的User对象为文章最上方的User.java)

测试类1:

packagecom.chinalife.utils;importorg.junit.Test;importcom.chinalife.proposal.common.util.CheckObjectIsNullUtils;/***

Description:测试对象判空

*@authorduanfeixia

* @date 2018年11月12日*/

public classCheckObjectIsNullUtilsTest {

@Testpublic voidtestObjectCheck(){

CheckObjectIsNullUtils checkUtils= newCheckObjectIsNullUtils();

User user= newUser();boolean flag1 =checkUtils.objCheckIsNull(user);

System.err.println("是否为空:"+flag1);

}

}

测试结果1: 【这里是受boolean类型值的影响,所以返回的结果为false】

70c7fe0e6a1fade92274b3a7a3da61aa.png

2>>>接下来将User对象的boolean类型属性去掉,再测试User对象的判断

User.java 如下:

packagecom.chinalife.utils;importjava.util.List;

public classUser {private String name; //姓名

private String age; //年龄

private String sex; //性别

private List hobbies; //爱好//private boolean isStudent;//是否是学生

publicUser(){}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicString getAge() {returnage;

}public voidsetAge(String age) {this.age =age;

}publicString getSex() {returnsex;

}public voidsetSex(String sex) {this.sex =sex;

}public ListgetHobbies() {returnhobbies;

}public void setHobbies(Listhobbies) {this.hobbies =hobbies;

}//public boolean isStudent() {//return isStudent;//}//

//public void setStudent(boolean isStudent) {//this.isStudent = isStudent;//}

}

测试类2:(和上面的一样)

packagecom.chinalife.utils;importorg.junit.Test;importcom.chinalife.proposal.common.util.CheckObjectIsNullUtils;/***

Description:测试对象判空

*@authorduanfeixia

* @date 2018年11月12日*/

public classCheckObjectIsNullUtilsTest {

@Testpublic voidtestObjectCheck(){

CheckObjectIsNullUtils checkUtils= newCheckObjectIsNullUtils();

User user= newUser();boolean flag1 =checkUtils.objCheckIsNull(user);

System.err.println("是否为空:"+flag1);

}

}

测试结果2: 【返回的是true,因为注释掉了Boolean类型的属性】

15f65b73de159e4a7e3f2b9f485d8185.png

这里需要注意的是数据类型: boolean与Boolean

boolean 定义的变量默认值为false,Boolean定义的变量默认值为 null.

ps: 在定义boolean类型变量时,最好不要使用 isXxx,因为默认生成的get方法就是 isXxx(), RPC框架在反向解析的时候,以为对应的属性名是 xxx,从而导致属性获取不到,抛出异常。

eg:定义boolean属性 boolean isSuccess;

对应的boolean类型获取数据的方法:

public String isSuccess(){

return isSuccess;

}

RPC框架在反向解析的时候,以为对应的属性名是 success 从而导致属性获取不到,抛出异常。

3>>>然后我们再来测试一下关于实实现序列化接口 Serializable 时的结果:

User.java如下

packagecom.chinalife.utils;importjava.util.List;//implements java.io.Serializable

public class User implementsjava.io.Serializable {private static final long serialVersionUID = 1L;private String name; //姓名

private String age; //年龄

private String sex; //性别

private List hobbies; //爱好

publicUser(){}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicString getAge() {returnage;

}public voidsetAge(String age) {this.age =age;

}publicString getSex() {returnsex;

}public voidsetSex(String sex) {this.sex =sex;

}public ListgetHobbies() {returnhobbies;

}public void setHobbies(Listhobbies) {this.hobbies =hobbies;

}

}

测试类3:

packagecom.chinalife.utils;importorg.junit.Test;importcom.chinalife.proposal.common.util.CheckObjectIsNullUtils;/***

Description:测试对象判空

*@authorduanfeixia

* @date 2018年11月12日*/

public classCheckObjectIsNullUtilsTest {

@Testpublic voidtestObjectCheck(){

CheckObjectIsNullUtils checkUtils= newCheckObjectIsNullUtils();

User user= newUser();boolean flag1 =checkUtils.objCheckIsNull(user);

System.err.println("是否为空:"+flag1);

}

}

测试结果3:【结果为false,因为serialVersionUID有值】

51890bf64b574af6ee1663edb72fab81.png

综上所述,当你需要判断Java对象是否为null的时候,你可以先通过 obj == null 去判断,如果obj 不等于null,再根据业务需求决定是否需要进一步判断 obj的所有属性是否都为null。

主要方法是: CheckObjectIsNullUtils.java 类中所示的内容。

需要注意的是: 当你的对象 实现了序列化接口或者是含有boolean类型的属性时 ,你要处理好是否要忽略这个两种类型的值。

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

闽ICP备14008679号