检查变量为空或null或parent为null的更好方法

时间:2019-05-10 21:28:44

标签: java

我在Java中有如下条件:

if(a == null || a.getRecords() == null || a.getRecords().isEmpty()) {
}

是否有更好的方法使用某些Google番石榴库或apache库编写此条件?

3 个答案:

答案 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.firstNonNullCollections.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,然后在构造函数中对其进行初始化,以便可以确保所有内容均已初始化。