返回顶部
首页 > 资讯 > 后端开发 > Python >java如何判断一个对象是否为空对象
  • 626
分享到

java如何判断一个对象是否为空对象

2024-04-02 19:04:59 626人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

最近项目中遇到一个问题,在用户没填数据的时候,我们需要接收从前端传过来的对象为null,但是前端说他们一个一个判断特别麻烦,只能传个空对象过来,我第一个想法就是可以通过反射来判断对象

最近项目中遇到一个问题,在用户没填数据的时候,我们需要接收从前端传过来的对象为null,但是前端说他们一个一个判断特别麻烦,只能传个空对象过来,我第一个想法就是可以通过反射来判断对象是否为空。

第一版:

User.java

public class User {
    private String username;

    private Boolean active;

    private Long id;
    // 省略get和set方法
}

ReflectUtil.java

public class ReflectUtil {
    public static boolean isObjectNull(Object obj){
        if (obj != null) {
            Class<?> objClass = obj.getClass();
            Method[] declaredMethods = objClass.getDeclaredMethods();
            if (declaredMethods.length > 0) {
                int methodCount = 0; // get 方法数量
                int nullValueCount = 0; // 结果为空

                for (Method declaredMethod : declaredMethods) {
                    String name = declaredMethod.getName();
                    if (name.startsWith("get") || name.startsWith("is")){
                        methodCount += 1;
                        try {
                            Object invoke = declaredMethod.invoke(obj);
                            if (invoke == null) {
                                nullValueCount += 1;
                            }
                        } catch (IllegalAccessException | InvocationTargetException e){
                            e.printStackTrace();
                        }
                    }
                }
                return methodCount == nullValueCount;
            }
        }
        return false;
    }
}

TestReflect.java

public class TestReflect {
    public static void main(String[] args) {
        User user = new User();
        System.out.println(ReflectUtil.isObjectNull(user));
    }
}

结果:

true

第一版 获取一个类的声明的方法,判断方法如果以get或者is开头就是get方法,然后通过反射调用改方法获取结果,再判断结果是否为空,如果结果为null的话就把nullValueCount+1,最后返回结果为空的值的数量和get方法数量比较的结果,如果两者数量相同则说明该对象为空,反之不为空。
第一版也可以判断一个对象是否为空,但前提是对象必须使用包装类,没有默认值的就不行了,当然你也可以根据类型和返回值结果来判断对象是否为空,但是如果想忽略某个属性不做判断,改起来就有点麻烦了。 后来想知道spring 的BeanUtils 是怎么实现属性复制的就看了一下,发现了新的方法,于是就有了第二版。

第二版:


    public static boolean isNullObject(Object obj , String... ignoreProperties) throws IntrospectionException {
        if (obj != null) {
            Class<?> objClass = obj.getClass();
            BeanInfo beanInfo = Introspector.getBeanInfo(objClass);
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

            List<String> ignoreList = (ignoreProperties != null ? Arrays.asList(ignoreProperties) : null);

            int count = 1; // 结果为空的属性数量 初始化为1 去除Object的getClass方法
            int propertyCount = propertyDescriptors.length; // 属性数量
            if (ignoreList != null){
                propertyCount -= ignoreList.size();
            }

            for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
                Method readMethod = propertyDescriptor.getReadMethod();
                String name = propertyDescriptor.getName();
                if (readMethod != null && (ignoreList == null || !ignoreList.contains(name))) {
                    Class<?> returnType = readMethod.getReturnType();
                    String typeName = returnType.getSimpleName();
                    Object invoke = null;
                    try {
                        invoke = readMethod.invoke(obj);
                        if (invoke == null) {
                            count+=1;
                        }else {
                            switch (typeName) {
                                case "String":
                                    if ("".equals(invoke.toString().trim())) {
                                        count += 1;
                                    }
                                    break;
                                case "Integer":
                                    if ((Integer) invoke <= 0) {
                                        count += 1;
                                    }
                                    break;
                                case "int":
                                    if ((int) invoke <= 0) {
                                        count += 1;
                                    }
                                    break;
                                case "double":
                                    if ((double) invoke <= 0.0d) {
                                        count += 1;
                                    }
                                    break;
                                case "Double":
                                    if ((Double) invoke <= 0.0D) {
                                        count += 1;
                                    }
                                    break;
                                case "float":
                                    if ((float) invoke <= 0.0f) {
                                        count += 1;
                                    }
                                    break;
                                case "Float":
                                    if ((Float) invoke <= 0.0F) {
                                        count += 1;
                                    }
                                    break;
                                case "Long":
                                    if ((Long) invoke <= 0L) {
                                        count += 1;
                                    }
                                    break;
                                case "long":
                                    if ((long) invoke <= 0L) {
                                        count += 1;
                                    }
                                    break;
                            }
                        }
                    } catch (IllegalAccessException | InvocationTargetException e) {
                        e.printStackTrace();
                    }
                }
            }
            return propertyCount == count;
        }
        return true;
    }

第一版和第二版思想基本都是一样的,都是通过读方法去判断返回值是否为空,只不过第二版在第一版上加强了可以忽略属性这个功能。
通过spring 的beanutils发现PropertyDescriptor这个类,从名字看来是个属性描述器,描述属性相关的东西,通过属性描述器可以获取bean的属性名称,读写方法,使用起来还挺方便。
通过Introspector内省类的静态方法getBeanInfo(Class<?> beanClass)获取BeanInfo,然后通过BeanInfo对象的getPropertyDescriptors()就可以返回属性描述器。
由于没有太多研究就不多介绍了。

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

--结束END--

本文标题: java如何判断一个对象是否为空对象

本文链接: https://lsjlt.com/news/141066.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java如何判断一个对象是否为空对象
    最近项目中遇到一个问题,在用户没填数据的时候,我们需要接收从前端传过来的对象为null,但是前端说他们一个一个判断特别麻烦,只能传个空对象过来,我第一个想法就是可以通过反射来判断对象...
    99+
    2024-04-02
  • Java中如何判断一个对象是否为空
    在Java中,可以使用以下几种方法来判断一个对象是否为空:1. 使用 `==` 运算符判断是否为 `null`:通过将对象与 `nu...
    99+
    2023-09-25
    Java
  • java对象如何判断是否为空
    在实际书写代码的时候,经常会因为对象为空,而抛出空指针异常java.lang.NullPointerException。下面我们来看一下java中判断对象是否为空的方法:(推荐:java视频教程)首先来看一下工具StringUtils的判断...
    99+
    2017-05-08
    java 对象
  • 如何判断java对象是否为空
    首先来看一下工具StringUtils的判断方法:一种是org.apache.commons.lang3包下的;另一种是org.springframework.util包下的。这两种StringUtils工具类判断对象是否为空是有差距的:S...
    99+
    2017-08-03
    java入门 判断 java 对象
  • java如何判断对象是否为空
    在Java中,可以使用以下方法来判断一个对象是否为空:1. 使用`==`运算符来判断对象是否为null。如果对象等于null,则表示...
    99+
    2023-08-17
    java
  • java判断对象是否为空
    对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序...
    99+
    2018-09-04
    java
  • javascript如何判断对象是否为空
    这篇文章将为大家详细讲解有关javascript如何判断对象是否为空,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法:1、使用“JSON.stringify()”方法,将对象转化为json字符串,再判断...
    99+
    2023-06-14
  • es6如何判断对象是否为空
    今天小编给大家分享一下es6如何判断对象是否为空的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。判断方法:1、用“Object...
    99+
    2023-07-04
  • php判断对象是否为空
    if($users->count()==0){                    $result->errer = "not exist";                } php判断对象是否为空两种方法:1、网上很多方法分享说用em...
    99+
    2023-09-13
    java javascript 服务器
  • java判断集合对象是否为空
    Java 集合类中的 List.isEmpty() 方法用于判断集合对象是否为空,如果为空,则返回 true,否则返回 false。语法:isEmpty()应用:本示例使用 List 接口的实现类 ArrayList 初始化一个列表对象 l...
    99+
    2014-08-18
    java基础 java 判断 集合对象 为空
  • Vue中如何判断对象是否为空
    目录Vue判断对象是否为空方法一方法二Vue判断对象为空|cannot read property ‘xx‘ of undefined结构体如下解决方法v-f...
    99+
    2024-04-02
  • java中怎么判断对象是否为空
    java中判断对象是否为空的方法:首先来看一下工具StringUtils的判断方法:一种是org.apache.commons.lang3包下的;另一种是org.springframework.util包下的。这两种StringUtils工...
    99+
    2016-03-01
    java
  • java判断一个对象是否数组
    判断对象是否为数组:public static void main(String[] args) { String[] a = ["1","2"]; if(a instanceof String[]){ ...
    99+
    2019-07-20
    java基础 java 数组
  • java中判断对象中某个属性是否为空
    问题:java对象接受从数据库查出来的数据时,对对象的某一属性进行操作,在操作属性中存储的数据中不对进行检查,会出现空指针异常的情况。 问题再现:新建一个实体类 public class Student { private Integ...
    99+
    2023-09-11
    java 开发语言 mysql
  • java判断对象是否为数组
    数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。用法: (推荐学习:java课程)Array.isArray(object)参数object:要检测的内容返回值返回值是布尔类型...
    99+
    2017-12-03
    java基础 java
  • php如何判断对象为空
    在php中判断对象是否为空的方法使用empty()函数判断$a = 0;$b = '';$c = array();f (empty($a)) e...
    99+
    2024-04-02
  • JavaScript中怎么判断对象是否为空
    这篇文章将为大家详细讲解有关JavaScript中怎么判断对象是否为空,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在自己的日常开发中,一般使用Object.keys()来判断对象是否为空:const&n...
    99+
    2023-06-29
  • java判断对象是否为字符串
    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。用法:result = object instanceo...
    99+
    2020-01-27
    java基础 java
  • java如何判断对象是否相等
    equals的作用及与==的区别equals被用来判断两个对象是否相等。equals通常用来比较两个对象的内容是否相等,==用来比较两个对象的地址是否相等。equals方法默认等同于“==”。Object类中的equals方法定义为判断两个...
    99+
    2021-10-21
    java基础 java 判断 对象 相等
  • JavaScript中如何判断对象是否为空的方法
    目录Object.keys()示例为什么需要额外判断对象的构造函数呢?另一种边界情况总结在自己的日常开发中,一般使用Object.keys()来判断对象是否为空: const obj...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作