我有一个if-else案例的方法,以及多个return语句,具体取决于具体的流程。
我有一行代码需要在return语句之前发生(例如releaseResources)。
我想确定无论如何都要执行此行。
在java中有这样做的好方法吗? 什么能确保在离开闭包之前执行一段代码?
答案 0 :(得分:1)
您正在寻找的是try-finally块。这是一个例子:
public Something someMethod() {
try {
if(someStatement) {
return new Something();
} else {
return new SomethingElse();
}
} finally {
// this is always executed, even if there is an Exception
}
}
问题是这是否真的是你想要的。如果它有两种方法,听起来你的代码实际上可能更好(更具可读性)。像这样:
public Something createSomething() {
if(someStatement) {
return new Something();
} else {
return new SomethingElse();
}
}
public Something someMethod() {
Something something = createSomething();
// Do the thing that always needs to be done
return something;
}
这将你正在做的事情分成两种方法。现在,如果问题是第一种方法可以抛出异常并且你想要做一些事情,你仍然可以使用finally。但是捕获和处理异常可能会更好。
另外:您已注意到要关闭资源。在这种情况下,我建议你研究一下try-with-resources: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
这里有一个例子:
private String someMethod() throws IOException {
// Java automatically closes the following Readers:
try (BufferedReader br =
new BufferedReader(new FileReader("/path"))) {
return br.readLine();
}
}
答案 1 :(得分:0)
根据您使用的编程语言,try-catch-finally存在:
Example from other post about launch code after the if-else
最后语句将在try-catch条件结束时启动
为编辑而烦恼
答案 2 :(得分:0)
您可以使用try/finally
块,如果这是您真正想要的。
try {
if (...) return ...;
else if (...) return ...;
else return ...;
} finally {
doSomething();
}
当您离开finally
块时,try
块中的代码将始终执行,特别是在任何return
语句处。
答案 3 :(得分:0)
即使抛出异常,也会始终执行finally
块。
try {
...
if () {
return;
else {
return;
}
} finally {
// Release resources
}
答案 4 :(得分:0)
主要的编程良好实践之一是每个方法应该只有一个return语句。如果您有许多可能的值,则倾向于将值保留在对象中并在最后返回。
E.g:
public int func(boolean condition) {
if(condition) {
return 1;
} else {
return 0;
}
}
应该像这样
public int func(boolean condition) {
int num;
if(condition) {
num = 1;
} else {
num = 0;
}
return num;
}
正如您可能看到的那样,确保在返回此方法之前调用方法非常简单,只在返回之前添加它。