Возможно ли при помощи try-with-resources закрыть все элементы списка?

Генерируется список / массив, состоящий из объектов AutoCloseable. Возможно ли закрыть все элементы списка при помощи try-with-resources?

Потому что сейчас мне приходится писать функциональность try-with-resources руками, что меня не устраивает:

Set<AutoCloseable> autoCloseableResources = new HashSet<>();
try {
    // генерируем здесь AutoCloseable элементы и добавляем их в множество autoCloseableResources
} catch (Throwable var11) {
    var2 = var11;
    throw var11;
} finally {
    autoCloseableResources
        .forEach(resource -> {
            if (resource != null) {
            if (var2 != null) {
                try {
                    resource.close();
                } catch (Throwable var10) {
                    var2.addSuppressed(var10);
                }
            } else {
                resource.close();
            }
        }
    })
}

Возможно ли каким-либо образом автоматически закрыть все элементы списка autoCloseableResources с использованием try-with-resources?


Ответы (1 шт):

Автор решения: Roman C

Автоматически можно, только надо использовать один ресурс в try-with-resources. Этот ресурс должен имплементить AutoClosable интерфейс, а бойлерплейт код можно перенести в имплементацию.

→ Ссылка