static CloseableIterableIterator closeableIterableIterator(Iterator it) { if (it cast CloseableIterableIterator) ret it; ret it == null ? null : new CloseableIterableIterator { public bool hasNext() { ret it.hasNext(); } public A next() { ret it.next(); } public void remove() { it.remove(); } close { closeOpt(it); } }; } static CloseableIterableIterator closeableIterableIterator(Cl it) { ret closeableIterableIterator(iterator(it)); }