在try块中使用return(Java)

use*_*702 5 java

我有一个try块,用于尝试运行数据库查询,还有一个finally块,用于释放数据库资源.如果数据库中不存在值,则返回null.

在try块中返回是个好主意吗?

一些示例代码:

    try {
        if (!jedis.exists(name)) {
            return null; // Is this a good idea?
        }

        // Do database related stuff...
    } catch (JedisConnectionException e) {
        // Fix any problems that happen
    } finally {
        // Return all objects to pools and clean up
    }
Run Code Online (Sandbox Code Playgroud)

das*_*ght 9

在try块中返回是个好主意吗?

绝对:如果要返回的对象的准备完全在try块的范围内,则没有理由将其可见性扩展到其自然边界之外.

作为例证,这个

try {
    ReturnType ret = ...
    // Compute ret
    return ret;
} catch {
    ...
} finally {
    ...
}
Run Code Online (Sandbox Code Playgroud)

比这更好

ReturnType ret = ...
try {
    // Compute ret
} catch {
    ...
} finally {
    ...
}
return ret;
Run Code Online (Sandbox Code Playgroud)

  • 它会导致编译错误。您应该至少在 Catch 块内返回一个值。如果在 try 块中返回之前出现异常,该方法应该返回一些值。 (2认同)