java objectUtils 使用可能会出现的问题
作者:真男人都用c和汇编
这篇文章主要介绍了java objectUtils 使用可能会出现的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
objectUtils使用可能会出现的问题
当一个类没有实现toString方法的时候,objectUtils会通过调用object的toString方法对对象实例化,所以objectUtils.isEmpty可能会对为空的对象返回false
例如
String s1 = ObjectUtils.identityToString(null); String s2 = ObjectUtils.identityToString(""); String s3 = ObjectUtils.identityToString(Boolean.TRUE); System.out.println(s1); // null System.out.println(s2); //java.lang.String@73a80183 System.out.println(s3); //java.lang.Boolean@1afb7ac7
推荐使用
判断对象为空直接使用null ,判断字符就用string
public static boolean isNullOrEmpty(Object obj){undefined return obj ==null || “”.equals(obj.toString()) } public static boolean isEmpty(String str ) {return str==null || str.length() ==0;}
判断对象内容是否为空ObjectUtils工具类
public class ObjectUtils { /** * 判断对象是否为空(根据一般常用类型区分) * @param object * @return: boolean */ public static boolean isEmpty(Object object){ //判断对象是否为null if (null == object){ return true; } //判断对象是否为String类型 if (object instanceof String){ if (object.toString().length() == 0){ return true; } } //判断对象是否为Map if (object instanceof Map){ Map map = (Map)object; if (map.size() == 0){ return true; } } //判断对象是否为List if (object instanceof List){ List list = (List)object; if (list.size() == 0){ return true; } } //普通的类对象 Field[] fields = object.getClass().getDeclaredFields(); //先假设全部属性都是空的,所以只要出现一个属性不为空的就不需要在循环判断 boolean flag = true; for (Field field : fields) { field.setAccessible(true); try { if (!ObjectUtils.isEmpty(field.get(object))) { flag = false; break; } } catch (Exception e) { e.printStackTrace(); } } return flag; } /** * 判断obejct对象中除了names里面的字段,其他字段都为null(已知对象类型) * @param object * @param names * @return */ public static boolean isEmpty(Object object,String... names){ Field[] fields = object.getClass().getDeclaredFields(); //用于判断所有属性是否为空,如果参数为空则不查询 boolean flag = true; for (Field field : fields) { //不检查 直接取值 field.setAccessible(true); try { String fieldName = field.getName(); List<String> nameList = new ArrayList<>(); if (null != names && names.length != 0){ nameList = Arrays.asList(names); } if (!nameList.contains(fieldName) && !Objects.isNull(field.get(object))) { //不为空 flag = false; break; } } catch (Exception e) { e.printStackTrace(); } } return flag; } /** * 判断object对象中除了names里面的字段,其他字段都为null或者是""(已知对象类型) * @param object * @param names * @return */ public static boolean isBlank(Object object,String... names){ Field[] fields = object.getClass().getDeclaredFields(); //用于判断所有属性是否为空,如果参数为空则不查询 boolean flag = true; for (Field field : fields) { //不检查 直接取值 field.setAccessible(true); try { String fieldName = field.getName(); List<String> nameList = new ArrayList<>(); if (null != names && names.length != 0){ nameList = Arrays.asList(names); } Object value = field.get(object); if (!nameList.contains(fieldName) && !isEmpty(value)) { //不为空 flag = false; break; } } catch (Exception e) { e.printStackTrace(); } } return flag; } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。