首页 > 技术文章 > Java判断一个类里是否存在某个属性

baijinqiang 2019-12-24 10:38 原文

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

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

推荐阅读