我想要一个遍历循环的方法,如果满足某个条件,则返回一个值(在本例中为"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 中引入的可选
浏览此处