如何确保在方法退出之前运行一段代码

时间:2015-12-16 11:49:50

标签: java closures

我有一个if-else案例的方法,以及多个return语句,具体取决于具体的流程。

我有一行代码需要在return语句之前发生(例如releaseResources)。

我想确定无论如何都要执行此行。

在java中有这样做的好方法吗? 什么能确保在离开闭包之前执行一段代码?

5 个答案:

答案 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;
}

正如您可能看到的那样,确保在返回此方法之前调用方法非常简单,只在返回之前添加它。