sclass CloseablesHolder implements AutoCloseable { // TODO: combine with set for speed? what about multiple additions of the same element though new L closeables; A add(A a) { if (a != null) closeables.add(a); ret a; } // remove from list, don't close A remove(A a) { closeables.remove(a); ret a; } // synonym of remove A takeOut(A a) { ret remove(a); } A close(A a) { if (a == null) ret a; closeables.remove(a); main close(a); ret a; } public void close { while (nempty(closeables)) main close(popLast(closeables)); } }