当前位置: 代码网 > it编程>编程语言>Java > Java判断对象是否为空的四种方法小结

Java判断对象是否为空的四种方法小结

2024年10月27日 Java 我要评论
在 java 中,判断对象是否为空可以使用以下几种方法:1、使用==或!=运算符比较对象引用与null。例如:if (myobject == null) { // myobject 为空} el

在 java 中,判断对象是否为空可以使用以下几种方法:

1、使用 == 或 != 运算符比较对象引用与 null。例如:

if (myobject == null) {
    // myobject 为空
} else {
    // myobject 不为空
}

2、使用 objects.isnull() 方法。这个方法的优点是可以处理 null 参数的情况,不会抛出 nullpointerexception。例如:

if (objects.isnull(myobject)) {
    // myobject 为空
} else {
    // myobject 不为空
}

3、使用对象的 instanceof 运算符。这种方法可以检查对象是否为特定的类型。例如:

if (myobject instanceof myclass) {
    // myobject 不为空,并且是 myclass 类型
} else {
    // myobject 为空或不是 myclass 类型
}

4、使用 optional 类。这是 java 8 引入的一个功能强大的工具类,可以优雅地处理空值。例如:

optional<myclass> myoptional = optional.ofnullable(myobject);
if (myoptional.ispresent()) {
    // myobject 不为空
    myclass myinstance = myoptional.get();
} else {
    // myobject 为空
}

总的来说,选择哪种方法主要取决于具体的需求和编码习惯。需要注意的是,直接使用 == 或 != 运算符比较对象引用与 null 是最简单直接的方法,但可能会在某些情况下抛出 nullpointerexception。使用 objects.isnull() 和 optional 类可以更安全地处理空值情况。

附:判断某个对象属性值都不为空/至少有一个属性值不为空

如果是字符串属性则不为null和不为""

有时候,controller参数接收json对象,我们需要判断该对象中的属性值是否都不为空(都是必须的)/至少有一个属性值不为空,其中字符串属性不为null和不为“”,如果对象参数多,controller里面遍历每一个属性去判断,代码冗余。

当然还有另外的方法,比如spring框架中的注解@notnull,@notblank,@valid。

import org.springframework.util.stringutils;

import java.lang.reflect.field;
import java.lang.reflect.method;

/**
 * title:判断某个对象属性值都不为空,字符串属性不为空和不为空字符串
 * description:利用类的反射获取,前提是javabean中的属性都是包装类
 * @author wzq
 * @version 1.0.0
 * @date 2020/4/19
 */
public class objisutil {

    /**
     * 根据属性名获取属性值
     */
    private static object getfieldvaluebyname(string fieldname, object o) {
        try {
            string firstletter = fieldname.substring(0, 1).touppercase();
            string getter = "get" + firstletter + fieldname.substring(1);
            method method = o.getclass().getmethod(getter, new class[]{});
            object value = method.invoke(o, new object[]{});
            return value;
        } catch (exception e) {
            return null;
        }
    }

    /**
     * 判断对象中的属性值是否都不为空,字符串属性的需要判断空字符串
     */
    public static boolean isallnotnull(object o) {
        //获取对象的属性数组,反射
        field[] fields = o.getclass().getdeclaredfields();
        string name = "";
        for (int i = 0; i < fields.length; i++) {
            //属性名
            name = fields[i].getname();

            //pojos和dto含有serialversionuid,得去掉该字段的判断
            if (name.equals("serialversionuid"))
                continue;

            //当前属性名的值
            object fieldvaluebyname = getfieldvaluebyname(name, o);

            //值为null
            if (fieldvaluebyname == null)
                return false;

            //如果是string,判断空字符串""
            if (fields[i].gettype().equals(string.class)){
                string s = (string) fieldvaluebyname;
                if (stringutils.isempty(s)){
                    return false;
                }
            }

        }
        return true;
    }

    /**
     * 判断对象中的属性值至少有一个不为空
     */
    public static boolean onenotnull(object o) {
        //获取对象的属性数组,反射
        field[] fields = o.getclass().getdeclaredfields();
        string name = "";
        for (int i = 0; i < fields.length; i++) {
            //属性名
            name = fields[i].getname();

            //当前属性名的值
            object fieldvaluebyname = getfieldvaluebyname(name, o);

            //如果是string,判断空字符串""
            if (fields[i].gettype().equals(string.class)){
                string s = (string) fieldvaluebyname;
                if (!stringutils.isempty(s)){
                    return true;
                }
            }else{
                //值为null
                if (fieldvaluebyname != null)
                    return true;
            }

        }
        return false;
    }

//    public static void main(string[] args) {
//        usertest usertest = new usertest("1","name",1);
//        usertest usertest1 = new usertest("","",null);
//        usertest usertest2 = new usertest("1","",null);
//        usertest usertest3 = new usertest("1",null,1);
//        system.out.println(isallnotnull(usertest));//true
//        system.out.println(isallnotnull(usertest1));//false
//        system.out.println(isallnotnull(usertest2));//false
//        system.out.println(isallnotnull(usertest3));//false
//        system.out.println(onenotnull(usertest));//true
//        system.out.println(onenotnull(usertest1));//false
//    }

}

总结

到此这篇关于java判断对象是否为空的四种方法的文章就介绍到这了,更多相关java判断对象是否为空内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com