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

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

  最近项目出了点问题。当用户没有填写数据时,我们需要从前端接收空对象,但是前端说让他们一个一个判断特别麻烦,只能发一个空对象。我的第一个想法是,我可以通过反射来判断物体是否是空的。

  

第一版:

User.java

 

  公共类用户{私有字符串用户名;私有布尔活动;私有长id;//省略get和set方法}ReflectUtil.java

  public class reflect util { public static boolean isObjectNull(Object obj){ if(obj!=null) { Class?obj class=obj . getclass();method[]declared methods=obj class . getdeclaredmethods();if(declared methods . length 0){ int method count=0;get方法的个数int null value count=0;//对于(方法声明方法3360声明方法){ string name=declared method . getname(),结果为空;if(name . starts with( get ) name . starts with( is ){ method count=1;try { Object invoke=declared method . invoke(obj);if(invoke==null){ null value count=1;} } catch(IllegalAccessException InvocationTargetException e){ e . printstacktrace();} } }返回methodCount==nullValueCount} }返回false}}TestReflect.java

  公共类test reflect { public static void main(String[]args){ User User=new User();system . out . println(reflect util . isobjectnull(user));}}结果:

  真实的

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

  00-1010/* * *确定对象是否为空,* @ param obj * @ param ignore properties被忽略的属性* @return如果get方法的数量等于空属性的数量,则返回true,否则返回false */public static boolean为空对象(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 判断对象是否为空内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: