java objectUtils 使用可能会出现的问题

网友投稿 508 2022-08-24


java objectUtils 使用可能会出现的问题

目录objectUtils使用可能会出现的问题例如推荐使用判断对象内容是否为空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 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 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;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python_批量创建文件夹(Python创建一个文件夹)
下一篇:python_if判断语句(python if 或判断)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~