背景:我使用 Java 类InitialDirContext
来访问 LDAP 目录。 不幸的是,它没有实现接口AutoCloseable
,因此不能在try-with-resources块中使用。
这是我写的原始代码:(受到这个答案的启发)
final Properties props = new Properties();
// Populate 'props' here.
final InitialDirContext context = new InitialDirContext(props);
Exception e0 = null;
try {
// use 'context' here
}
catch (Exception e) {
// Only save a reference to the exception.
e0 = e;
// Why re-throw?
// If finally block does not throw, this exception must be thrown.
throw e;
}
finally {
try {
context.close();
}
catch (Exception e2) {
if (null != e0) {
e0.addSuppressed(e2);
// No need to re-throw 'e0' here. It was (re-)thrown above.
}
else {
throw e2;
}
}
}
这是安全、正确且等效的替代品吗?
try (final AutoCloseable dummy = () -> context.close()) {
// use 'context' here
}
我想答案是肯定的,但我想确认一下。我尝试用谷歌搜索这种模式,但一无所获。就是这么简单!因此,我怀疑它可能不正确。
编辑:我刚刚发现这个答案具有类似的模式。
慕勒3428872
相关分类