java objectUtils 使用可能会出现的问题


Posted in Java/Android onFebruary 28, 2022

objectUtils使用可能会出现的问题

当一个类没有实现toString方法的时候,objectUtils会通过调用object的toString方法对对象实例化,所以objectUtils.isEmpty可能会对为空的对象返回false

例如

String s1 = ObjectUtils.identityToString(null);
String s2 = ObjectUtils.identityToString("");
String s3 = ObjectUtils.identityToString(Boolean.TRUE);
System.out.println(s1); // null
System.out.println(s2); //java.lang.String@73a80183
System.out.println(s3); //java.lang.Boolean@1afb7ac7

推荐使用

判断对象为空直接使用null ,判断字符就用string

public static boolean isNullOrEmpty(Object obj){undefined
return obj ==null || “”.equals(obj.toString())
}
public static boolean isEmpty(String str ) {return str==null || str.length() ==0;}

判断对象内容是否为空ObjectUtils工具类

public class ObjectUtils {
    /**
     * 判断对象是否为空(根据一般常用类型区分)
     * @param object
     * @return: boolean
     */
    public static boolean isEmpty(Object object){
        //判断对象是否为null
        if (null == object){
            return true;
        }
        //判断对象是否为String类型
        if (object instanceof String){
            if (object.toString().length() == 0){
                return true;
            }
        }
        //判断对象是否为Map
        if (object instanceof Map){
            Map map = (Map)object;
            if (map.size() == 0){
                return true;
            }
        }
        //判断对象是否为List
        if (object instanceof List){
            List list = (List)object;
            if (list.size() == 0){
                return true;
            }
        }
        //普通的类对象
        Field[] fields = object.getClass().getDeclaredFields();
        //先假设全部属性都是空的,所以只要出现一个属性不为空的就不需要在循环判断
        boolean flag = true;
        for (Field field : fields) {
            field.setAccessible(true);
            try {
                if (!ObjectUtils.isEmpty(field.get(object))) {
                    flag = false;
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return flag;
    }
    /**
     * 判断obejct对象中除了names里面的字段,其他字段都为null(已知对象类型)
     * @param object
     * @param names
     * @return
     */
    public static boolean isEmpty(Object object,String... names){
        Field[] fields = object.getClass().getDeclaredFields();
        //用于判断所有属性是否为空,如果参数为空则不查询
        boolean flag = true;
        for (Field field : fields) {
            //不检查 直接取值
            field.setAccessible(true);
            try {
                String fieldName = field.getName();
                List<String> nameList = new ArrayList<>();
                if (null != names && names.length != 0){
                    nameList = Arrays.asList(names);
                }
                if (!nameList.contains(fieldName) && !Objects.isNull(field.get(object))) {
                    //不为空
                    flag = false;
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return flag;
    }
    /**
     * 判断object对象中除了names里面的字段,其他字段都为null或者是""(已知对象类型)
     * @param object
     * @param names
     * @return
     */
    public static boolean isBlank(Object object,String... names){
        Field[] fields = object.getClass().getDeclaredFields();
        //用于判断所有属性是否为空,如果参数为空则不查询
        boolean flag = true;
        for (Field field : fields) {
            //不检查 直接取值
            field.setAccessible(true);
            try {
                String fieldName = field.getName();
                List<String> nameList = new ArrayList<>();
                if (null != names && names.length != 0){
                    nameList = Arrays.asList(names);
                }
                Object value = field.get(object);
                if (!nameList.contains(fieldName) && !isEmpty(value)) {
                    //不为空
                    flag = false;
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return flag;
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
JVM入门之类加载与字节码技术(类加载与类的加载器)
Jun 15 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
Spring Boot两种全局配置和两种注解的操作方法
Jun 29 Java/Android
看完这篇文章获得一些java if优化技巧
Jul 15 Java/Android
OpenCV实现反阈值二值化
Nov 17 Java/Android
spring注解 @PropertySource配置数据源全流程
Mar 25 Java/Android
Java实现经典游戏泡泡堂的示例代码
Apr 04 Java/Android
Spring Boot配合PageHelper优化大表查询数据分页
Apr 20 Java/Android
Spring Data JPA框架的核心概念和Repository接口
Apr 28 Java/Android
Spring Data JPA框架自定义Repository接口
Apr 28 Java/Android
SpringBoot详解自定义Stater的应用
Jul 15 Java/Android
IDEA中sout快捷键无效问题的解决方法
Jul 23 Java/Android
JVM之方法返回地址详解
Feb 28 #Java/Android
解决persistence.xml配置文件修改存放路径的问题
Feb 24 #Java/Android
Java实现学生管理系统(IO版)
alibaba seata服务端具体实现
Feb 24 #Java/Android
java协程框架quasar和kotlin中的协程对比分析
Feb 24 #Java/Android
springmvc直接不经过controller访问WEB-INF中的页面问题
Feb 24 #Java/Android
正则表达式拆分url实例代码
Feb 24 #Java/Android
You might like
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
PHP的开合式多级菜单程序
2006/10/09 PHP
PHP多文件上传类实例
2015/03/07 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
webpack打包js的方法
2018/03/12 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
Python群发邮件实例代码
2014/01/03 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
pandas中ix的使用详细讲解
2020/03/09 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
一套带网友答案的.NET笔试题
2016/12/06 面试题
初中班主任寄语
2014/04/04 职场文书
干部选拔任用方案
2014/05/26 职场文书
优秀教师单行材料
2014/12/16 职场文书
庆六一开幕词
2015/01/29 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
离婚起诉书范本
2015/05/18 职场文书
爱国影片观后感
2015/06/18 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers