sclass CloseablesHolder implements AutoCloseable, IResourceHolder { new LinkedHashSet closeables; public A add(A a) { if (a != null) closeables.add(a); ret a; } // remove from list, don't close A remove aka takeOut(A a) { closeables.remove(a); ret a; } // close and remove A close(A a) { if (a == null) ret a; closeables.remove(a); main close(a); ret a; } public void close { for (AutoCloseable c : reversed(cloneAndClear(closeables))) main close(c); } }