在我尝试重构的那一刻,我得到了这个方法。
public static boolean isEmpty(Object value) {
boolean empty = false;
if (value instanceof String && ((String) value).isEmpty()) {
empty = true;
} else if (value instanceof List && ((List<?>) value).isEmpty()) {
empty = true;
} else if (value instanceof String[] && ArrayUtils.isEmpty((String[]) value)) {
empty = true;
} else if (value == null) {
empty = true;
}
return empty;
}
有没有一个明显更好的方法来做到这一点,我错过了?
我知道我可以把所有的条件都放在一个上面 if
使用链表的语句 ||
声明,但我真的不认为这比我现在得到的更好。
4条答案
按热度按时间fcg9iug31#
正如dehaar在回答中提到的,代码可以通过使用
if-return
组合。但是,您应该进一步概括代码,例如,支持所有数组类型,而不仅仅是字符串数组,并且支持所有集合类型,而不仅仅是列表。
同样地,
String
实现一个名为CharSequence
,所以请支持这一点。这样,代码将支持以下类StringBuilder
及StringBuffer
也代码被修改为使用纯内置方法,即不依赖于
ArrayUtils
.更新:添加了对基本数组的支持。
上述实现与jsp el非常匹配
empty
接线员:这个
empty
运算符是前缀运算符,可用于确定值是null还是空。评价
empty A
如果A
是null
,返回true
否则,如果A
是空字符串,然后返回true
否则,如果A
是空数组,然后返回true
否则,如果A
是空的吗Map
,返回true
否则,如果A
是空的吗Collection
,返回true
否则返回false
nkcskrwz2#
在Java17中,您将能够使用
switch
表情。根据第8213076版,语法将为:注意:这是java 17中的一个预览功能。在以后的版本中,它可能会更改甚至完全删除。
(JEP406中最初提出的语法有点不同:
如您所见,原始版本不需要在每个
case
.)vmjh9lq93#
您可以通过省略标志并直接返回空性检查的结果来缩短此代码:
这可视为可读性的改进。
1wnzp6jl4#
java原生UTIL使您能够检查
Objects.isNull(value)
这不等于空。如果你想坚持使用本机java,你做得很好,只要美化你的代码就行了。然而,这种方法存在于springframework中ObjectUtils
类,而不考虑对象的类型:spring框架文档:类objectutils