Справочная информация: я использую класс 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
}
I думаю ответ - да, но я хочу подтвердить. Я попробовал поискать в Google по этому шаблону, но ничего не нашел. Это так просто! Таким образом, я подозреваю, что это может быть не так.
Редактировать: Я только что нашел этот ответ с похожим шаблоном.