如何判断一个对象的内容是否为空

原因

使用Controller的形参及注解@ModelAttribute来接收页面传来的数据,但是该形参类型中的属性过多,不想一一判断,就想有没有偷懒的方法。

搜索一番,找到一个不错的思路:利用反射获取所有字段,再判断内容是否为null。

初步代码如下

/**
 * 注意,如果order是null,也返回true。
 *
 * @param order
 * @return
 */
private boolean isOrderAllFieldNull(Order order){
    if(order == null){
        return true;
    }
    Class<Order> cls = Order.class;
    Field[] fields = cls.getDeclaredFields();
    for(Field field : fields){
        try{
            field.setAccessible(true);
            if(field.get(order)!=null){
                return false;
            }
        } catch(IllegalAccessException e){
        }
    }
    return true;
}

问题

上面的代码有不少问题,例如没考虑排除serialVersionUID,甚至没考虑基本类型是有默认值的,更没考虑Order中的属性可能设有默认值。。。

貌似离题万里了,但是因为这里需要的是判断页面有无传值进来,而不是真的判断Order对象的内容是否为空!

就是说,前面的出发点错了!囧

于是又写了代码如下(还是错的。。):

/**
     * 目的,判断是否有赋值。
     * 不能传入null对象!!!
     *
     * @param obj
     * @return
     * @throws Exception
     */
    public <T> boolean isAllFieldStill(T obj) throws Exception {
        Class cls = obj.getClass();
        T t2 = (T) cls.getConstructor().newInstance();// 创建一个新的对象,用于对比数据
        Field[] fields = cls.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true); // 访问所有字段
            // if (field.getName().equals("serialVersionUID")) {// 无视掉序列化ID
            // continue;
            // }
            if (field.get(obj) != null) { // 卧槽,基本类型做不到啊
                if (field.getType().getName().equals("byte") || field.getType().getName().equals("short")
                        || field.getType().getName().equals("int") || field.getType().getName().equals("long")) {
                    // 判断
                    if ((int) field.get(obj) != (int) field.get(t2)) {
                        return false;
                    }
                } else if (field.getType().getName().equals("boolean")) {
                    // 判断
                    if ((boolean) field.get(obj) != (boolean) field.get(t2)) {
                        return false;
                    }
                } else if (field.getType().getName().equals("float")) {
                    // 判断
                    if ((float) field.get(obj) != (float) field.get(t2)) {
                        return false;
                    }
                } else if (field.getType().getName().equals("double")) {
                    // 判断
                    if ((double) field.get(obj) != (double) field.get(t2)) {
                        return false;
                    }
                } else {
                    // 都是引用类型了(引用类型需要有equals方法)
                    // 判断....
                    if (!field.get(obj).equals(field.get(t2))) {
                        return false;
                    }
                }
                return false;
            }

        }

        return true;
    }

写到上面的判断的时候,突然疯了。。。

于是有代码如下:

/**
 * 目的,判断是否有赋值。蛋疼,直接equals就行!!!强制要求重写equals即可。
 * 不能传入null对象!!!
 *
 * @param obj
 * @return
 * @throws Exception
 */
public <T> boolean isAllFieldStill2(T obj) throws Exception {
    Class cls = obj.getClass();
    T t2 = (T) cls.getConstructor().newInstance();// 创建一个新的对象,用于对比数据

    if (t2.equals(obj)) {
        return true;
    } else {
        return false;
    }
}

然后想的是,我干嘛要这么麻烦,直接new个对象再equals一下不就得了。。。

结论就是

卧槽卧槽卧槽

况且况且况且

时间: 2024-11-03 10:51:48

如何判断一个对象的内容是否为空的相关文章

JavaScript判断输入的内容是否为空,应该注意的一点!

JavaScript 我们经常要判断一个输入框中是否输入了内容,如果未输入内容就要弹出提示框告诉用户未输入内容! 但是这里有一个问题,如果用户输入的是一个空格 或者是一些其它空字符,这时如果不注意,就达不到要求了! 下面我给我出一段JavaScript代码用来解决以上问题: Js代码   //提交查询内容 function formSubmit() { var condId = document.getElementById("searchProductText"); var text

jquery判断表单内容是否为空

1 //判断表单数据是否为空 2 var t = $('form').serializeArray(); 3 $.each(t,function(i,item){ 4 if(item['value'] == '') { 5 console.log('信息不可为空') 6 showMsg('信息不可为空') 7 flag = 1; 8 return false 9 } else { 10 flag = 0; 11 } 12 }) 原文地址:https://www.cnblogs.com/11697

javascript判断一个对象是否是空对象,localStorage和sessionStorage区别

判断一个对象是否是空对象: var obj ={}; 1. if(JSON.stringify(newobj)=="{}"){ console.log('kongduixiang')  }else{ console.log('hehe')  } 2. if(Object.keys(newobj).length == 0){ console.log('kongduixiang'); } localStorage和sessionStorage区别: localStorage和session

JavaScript中判断一个对象是否为&quot;空对象”

JavaScript中判断一个对象是否为"空对象" 这里指的"空对象"是类似于:{ } 和 new Object() 这样的. 具体的代码实现和原理如下: // 所谓"空对象",即不包括任何可枚举(自定义)的属性.简而言之,就是该对象没有属性可以通过for...in迭代. // for-in循环会同时枚举非继承属性和从原型对象继承的属性,如果有,则立即返回false,否则默认返回true. isEmptyObject: function (obj

判断表单项内容为空后光标位于相应表单项

判断表单项内容为空后光标位于相应表单项:在进行表单验证的时候,一般都有这样的情况,如果一个表单项目没有通过验证的话,那么此表单项就会获得焦点,光标的位置也就会位于此表单项目中,下面就简单介绍一下如何实现次效果.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://w

2-12python使用any判断一个对象是否为空的方法

这篇文章主要介绍了python使用any判断一个对象是否为空的方法,并给出了改进的方法供大家对比参考,具有一定的借鉴价值,需要的朋友可以参考下 本文实例讲述了python使用any判断一个对象是否为空的方法.分享给大家供大家参考. 具体实现代码如下: >>> eth = {"eth0″:"192.168.1.1″} >>> any(eth) True >>> eth = {} >>> any(eth) False

js/jquery判断一个对象是否为空

一.js判断一个对象是否为空对象 1)通过JSON自带的.stringify方法来判断 //JSON自带的stringify方法,将json转成json字符串 var c = {}; if(JSON.stringify(c) == "{}"){ console.log("是空对象"); } 2)for...in...遍历属性 //for in var a = {}; var b = {foo:'bar'}; function aa(a){ for(var attr

判断一个对象是否为空? js

其实开发过程中常常会遇到判断对象和数组是否为空?下面介绍3种判断对象是否为空 1. 最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数组" function judgeObj(obj){ for(var attr in obj){ return console.log('非空对象') } return console.log('空对象') } 2.通过JSON自带的.stringify方法判断(上传数据常用) if(JSON.Strin

js判断一个对象是否为空

判断一个对象是否为空的三种方法 1.通过JSON自带的.stringify方法来判断 2.最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数组" 3.ES6新增的方法Object.keys() 原文地址:https://www.cnblogs.com/zhtian/p/9347841.html