如何避免在列表迭代期间返回 null 值(应该是默认结果)



我想要一个遍循环的方法,如果满足某个条件,则返回一个值(在本例中为"1"(。如果条件不为 true,则默认值将为 null。在这种情况下返回null可以吗?最干净的解决方案是什么?

for (Obj1 obj1 : objects1) {
    for (Obj2 obj2 : objects2) {
        if (...) {
          return "1";
        }
    }
}
return null;

好吧,如果只有两种可能性(在您的情况下为 1 或 null(,最好的方法是返回一个boolean

for (Obj1 obj1 : objects1) {
      for (Obj2 obj2 : objects2) {
        if (...) {
          return true;
        }
      }
    }
    return false;

Kepotx 的答案是一个好方法(返回 true 或 false(:

boolean b = containsOne();
if (b) {
    // Do something with success...
} else {
    // Do something with failure...
}
private boolean containsOne() {
    for (Obj1 obj1 : objects1) {
        for (Obj2 obj2 : objects2) {
            if (...) {
                return true;
            }
        }
    }
    return false;
}

但是,另一种可以做到这一点的方法是使用Clean Code中提到的尝试和捕获块:

try {
    int i = getOne();
    // Do something with success...
} catch (Exception e) {
    // Do something with failure...
}
private int getOne() throws Exception {
    for (Obj1 obj1 : objects1) {
        for (Obj2 obj2 : objects2) {
            if (...){
                return 1;
            }
        }
    }
    throw new Exception();
}
如果

调用方期望从您的方法中获得某些内容,建议不要返回 null。

  • 例如,如果你的方法应该返回一个字符串,当什么也找不到,只是返回一个空的字符串""

  • 或者如果你的函数应该返回一些东西,返回无效的数字-1

  • 如果该方法应该返回某物的列表,则返回空列表。

当您没有可能被解释为可以返回的错误值的内容时。然后返回空


在每种情况下,您都有责任编写文档来解释在这种情况下返回的内容。调用方有责任检查返回的对象是否正确

对抗空指针的最干净解决方案是使用 JDK8 中引入的 Optionals。 http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html

使用 Java 8 中引入的可选

浏览此处

相关内容

  • 没有找到相关文章

最新更新