Java判斷一個類里是否存在某個屬性
測試pojo類,比方我有個User類
@Getter
@Setter
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
我現在判斷User是否存在某個屬性
- 方式一、按照常理來說第一種辦法肯定是通過反射拿到這個類的所有屬性,循環遍歷再去一一比較,這種辦法是可行的,但是感覺這種方式不是太好。
/**
* 判斷你一個類是否存在某個屬性(字段)
*
* @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;
}
- 方式二、通過上網看到有些朋友說把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
如果上面方法有啥問題,歡迎批評指教!!