try with resources在Android上不可用,
如果您要定位各种设备,
所以我想用这样的语义模拟类似的东西:


无异常-关闭,如果关闭失败,则引发异常
有异常-关闭并忽略关闭异常


这样的代码是否可以按我的意愿工作,或者我错过了什么?并且可能以某种方式简化它吗?

final Closeable closebale = ...;
try {
    //work with closeable
} catch (IOException e) {
    try {
        closeable.close();
    } catch (IOException e2) {
        //log exception
    }
    closeable = null;
    throw e;
} finally {
    if (closeable != null) {
        //we not catch any exception
        closeable.close();
    }
}

最佳答案

Java的历史模式是:

Closeable foo = null;
try
    {
    foo = ...;
    ...
    }
finally
    {
    if (foo != null)
        { foo.close(); }
    }


如果希望捕获并处理或禁止尝试关闭资源期间发生的任何异常,可以将对.close()的调用放在try-catch块中。我建议不要抑制异常。至少您应该记录它们。

10-06 09:39