我有一个对象数组(Object[] array
),我想检查它是否为空,但如果它在NPE或任何其他异常时为null,则会快速失败。
我知道我可以进行以下检查
array.length == 0
但是,例如如果String
或收藏品不建议使用,IntelliJ甚至会对此进行检查:
报告任何
.size()
或.length()
与0字面的比较,可以通过调用.isEmpty()
来替换。
数组的.isEmpty()
是否有替换?
有ArrayUtils.html#isEmpty(java.lang.Object[]),但它也会检查null
,而我却想避免这种情况。
答案 0 :(得分:4)
因为.size()
是方法,所以它的实现是隐藏的。而且您无法确定此方法是否已优化(有一个可能性,例如,每次调用.size()
方法时,某些集合都会枚举项目)。这就是为什么计算集合的.size()
可能是昂贵的。同时,.isEmpty()
可以检查集合中是否至少有一个项目,并返回结果。
但是.length
只是一个领域。它什么都不做,只返回一个值。没有计算。该字段仅存储具有固定大小的数组长度。
我认为.size()
和.length
完全不同,在这种情况下,它们无法与集合和数组进行比较。
答案 1 :(得分:0)
最简单的方法就是自己编写这样的方法。这将是相当微不足道的。类似于以下内容
public boolean isArrayEmpty(Object[] array) {
if (array == null) {
//Throw nullpointer exception
//An easy of method of doing this would be accessing any array field (for example: array.length)
}
return (ArrayUtils.isEmpty(array));
}
话虽如此,array.length == 0
有害的原因却很少。它是最简单,最干净的方法,可以完全满足您的需求。最有可能的部分原因是ArrayUtils.isEmpty
允许轻松测试数组是否为空或 null,这是一个相对常见的需求,但你不想做这一点。