ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

空字符串的比较,空指针异常。java将Strin该类型的“null”转换为空,java反射获取对象的所有属性并判断再赋值

2021-09-03 15:31:18  阅读:164  来源: 互联网

标签:属性 java String Strin object printStackTrace 为空 null name


1. 产生原因

 我的设计缘由是因为前端vue填写某个表单时,有的输入项可以不输入,插入时数据库设计的是插入null,于是前端详情界面就由于没有判断,而且vue中{{}}双括号还可以用v-if判断一下,但v-model怎么判断可头疼了,但是更改数据库的设计时下下策,于是采用工具类。将一个类中所有的String类型的“null”字符串转换为空。

  比较"null"时发现一个有趣的事,先上工具类代码

public static Object getObjectNUllValueToEmpty(Object object) throws Exception {

        // 利用反射获取实体类的所有属性,返回Field数组
        /*****import java.lang.reflect.Field;使用这个*******/
        Field[] field = object.getClass().getDeclaredFields();
        try {
            // 遍历所有属性
            for (Field item : field) {
                // 获取属性的名字
                String name = item.getName();
                // 将属性的首字符大写,方便构造get,set方法
                name = name.substring(0, 1).toUpperCase() + name.substring(1);
                // 获取属性的类型
                String type = item.getGenericType().toString();

                //这里仅判断了String类型的属性
                // 如果type是类类型,则前面包含"class ",后面跟类名
                if (type.equals("class java.lang.String")) {
                    Method m = object.getClass().getMethod("get" + name);
                    System.out.println(m);
                    // 调用getter方法获取属性值
                    String value = (String) m.invoke(object);
                    //这里做判断
                    if ("null".equals(value)) {
                        //调用set方法
                        m = object.getClass().getMethod("set" + name, String.class);
                        System.out.println(m);
                        //这里赋值
                        m.invoke(object, "");
                    }
                }


            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return object;
    }

2.有趣的时,现在才发现为什么以前看别人的代码时都反过来写

    if ("null".equals(value))  这句话不能写成if(value.equals("null")),这样会报空指针异常

3.工具类拓展

上面的判断,还可以增加Integer类型的判断,紧接着String的判断写就行

4.使用该工具类

我使用springBoot作为讲解,我们经常会使用以下代码

User userInfo= service.getInfoById(id);
//紧接着使用静态类即可,但由于我返回值是Object,所以得强转为你需要的类型
User userInfoAfterInfo = (User) getObjectNUllValueToEmpty(userInfo)

return Result.OK(userInfoAfterInfo) 


//这样vue无论是{{}}还是v-model就都不需要再判断了

 

标签:属性,java,String,Strin,object,printStackTrace,为空,null,name
来源: https://www.cnblogs.com/cybg/p/15223278.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有