zoukankan      html  css  js  c++  java
  • Java判断一个类里是否存在某个属性

    Java判断一个类里是否存在某个属性

    测试pojo类,比方我有个User类

    @Getter
    @Setter
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }
    

    我现在判断User是否存在某个属性

    1. 方式一、按照常理来说第一种办法肯定是通过反射拿到这个类的所有属性,循环遍历再去一一比较,这种办法是可行的,但是感觉这种方式不是太好。
    /**
         * 判断你一个类是否存在某个属性(字段)
         *
         * @param fieldName 字段
         * @param obj   类对象
         * @return true:存在,false:不存在, null:参数不合法
         */
        public static Boolean isExistFieldName(String fieldName, Object obj) throws NoSuchFieldException {
            if (obj == null || StringUtils.isEmpty(fieldName)) {
                return null;
            }
            //获取这个类的所有属性
            Field[] fields = obj.getClass().getDeclaredFields();
            boolean flag = false;
            //循环遍历所有的fields
            for (int i = 0; i < fields.length; i++) {
                if (fields[i].getName().equals(fieldName)) {
                    flag = true;
                    break;
                }
            }
    
            return flag;
        }
    
    1. 方式二、通过上网看到有些朋友说把java对象转成 JSONObject,然后使用JSONObject的方法来解决,我感觉挺好,就试试。
    /**
         * 判断你一个类是否存在某个属性(字段)
         *
         * @param field 字段
         * @param obj   类对象
         * @return true:存在,false:不存在, null:参数不合法
         */
        public static Boolean isExistField(String field, Object obj) {
            if (obj == null || StringUtils.isEmpty(field)) {
                return null;
            }
            Object o = JSON.toJSON(obj);
            JSONObject jsonObj = new JSONObject();
            if (o instanceof JSONObject) {
                jsonObj = (JSONObject) o;
            }
            return jsonObj.containsKey(field);
        }
    

    测试

    public static void main(String[] args) throws NoSuchFieldException {
        String field = "email";
        User user = new User();
    
        System.out.println("【方式一】:" + isExistFieldName(field, user));
        System.out.println("【方式二】:" + isExistField(field, user));
    }
    //结果 field=email
    【方式一】:true
    【方式二】:true
    //结果 field=e-mail
    【方式一】:false
    【方式二】:false
    

    如果上面方法有啥问题,欢迎批评指教!!

  • 相关阅读:
    1+X云计算(中级) 单节点部署应用商城系统(gpmall)
    1+X云计算 应用商城系统(gpmall)-遇到的问题以及解决办法
    1+X云计算平台运维与开发(中级)eNSP A~E卷 试题+答案
    vi&vim 基本使用方法
    yum针对软件包操作的常用命令
    本地yum源配置
    SpringCloud微服务初体验
    SpringBoot自定义注解拦截器,实现登录token验证
    MySQL建立SSL连接问题,设置useSSL=false显式禁用SSL,或者设置useSSL=true
    TPL事务
  • 原文地址:https://www.cnblogs.com/baijinqiang/p/12090130.html
Copyright © 2011-2022 走看看