我在Java中有如下条件:
if(a == null || a.getRecords() == null || a.getRecords().isEmpty()) {
}
是否有更好的方法使用某些Google番石榴库或apache库编写此条件?
答案 0 :(得分:0)
不确定此解决方案是否更好,但是您可以使用Optional
:
boolean result = !Optional.ofNullable(a)
.map(MyClass::getRecords)
.filter(List::isEmpty)
.isPresent();
if (result) {
// ...
}
答案 1 :(得分:0)
A 的实现方式类似于使用null object pattern:
if (firstNonNull(firstNonNull(a, someNonNullInstance).getRecords(), emptyList()).isEmpty()) {
在使用MoreObjects.firstNonNull
和Collections.emptyList()
的地方。
这假设someNonNullInstance
是与a
相同类型的实例,并且记录列表为空(或getRecords()
的任何类型)。
但是,我不建议这样做。原始代码更具可读性(我甚至可以说这是 un 可读的)。
您可以通过分解表达式使它更具可读性:
TypeOfA anA = firstNonNull(a, someNonNullInstance);
List<Record> aList = firstNonNull(anA.getRecords(), emptyList());
if (aList.isEmpty()) {
// ...
}
但是它仍然感觉比原始版本差很多。
答案 2 :(得分:0)
似乎您在此处使用集合,如果您在项目中使用Apache Commons Collections库,则可以使用CollectionUtils.isEmpty and MapUtils.isEmpty()
方法来分别检查集合或映射是否为空或为空(即它们是“ null-safe”)。
还可以使用org.apache.commons.lang.Validate的“ notEmpty”方法:
Validate.notEmpty(myCollection) ->
验证指定的参数集合既不为null也不为零(没有元素);否则会引发异常。
使用spring时,您可以使用
boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj);
其中obj是任何[地图,集合,数组,任何东西...]
但是似乎很容易检查一个对象是否为空,但是验证它是否为空是很棘手的,因为该对象可以具有许多私有或继承的变量以及嵌套的对象,而这些对象都应该为空。为此,需要验证所有对象,或者在所有对象中使用某些isEmpty()方法来验证对象是否为空。
您不能直接执行此操作,您应该提供自己的方式进行检查。例如
class MyClass {
Object attr1, attr2, attr3;
public boolean isValid() {
return attr1 != null && attr2 != null && attr3 != null;
}
}
或者使所有字段都为final,然后在构造函数中对其进行初始化,以便可以确保所有内容均已初始化。