[ https://issues.apache.org/jira/browse/JENA-1601?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16769553#comment-16769553 ]
Andy Seaborne commented on JENA-1601: ------------------------------------- A possibility is to add these two default methods to ExtendedIterator: {code} /** * Execute an action on each element of this ExtendedIterator. * The iterator is consumed and closed by this call. */ public default void loop( Consumer<T> action ) { try { while(hasNext()) action.accept(next()); } finally { close(); } } /** * Execute an action on this ExtendedIterator, wrapped in a try-finally-close construct. * The iterator processing code can throw exceptions or return early. * The iterator is closed by this call. */ public default void process( Consumer<ExtendedIterator<T>> iteratorLoop ) { try { iteratorLoop.accept(this); } finally { close(); } } {code} This is a soft approach to having auto-closeable behaviour - it won't trigger all application code getting IDE warnings. > Make ClosableIterator<T> extend AutoCloseable > --------------------------------------------- > > Key: JENA-1601 > URL: https://issues.apache.org/jira/browse/JENA-1601 > Project: Apache Jena > Issue Type: Improvement > Components: Jena > Affects Versions: Jena 3.8.0 > Reporter: David Schwingenschlögl > Assignee: Andy Seaborne > Priority: Minor > > The interface org.apache.jena.util.iterator.ClosableIterator<T> defines a > method public void close(), so the concept of closing is already baked into > it. The only barrier to using a ClosableIterator (and thus, ExtendedIterator) > in a try-with-resource block is the missing extension of > java.lang.AutoCloseable. > According to API documentation of ClosableIterator, an iterator should be > closed when not completely exhausted, which may be the case when the block > consuming the iterator throws an exception, effectively making constructs > such as this necessary: > {code:java} > final ExtendedIterator<Triple> iterator = someGraph.find(); > try { > while (iterator.hasNext()) { > // consume iterator, might throw in here > } > } finally { > // Prevent resource leaks > iterator.close(); > } > {code} > This would be better expressed in a try-with-resource-construct: > {code:java} > try (final ExtendedIterator<Triple> itrator = someGraph.find()) { > // consume iterator, might throw in here > } > {code} > From what I can tell, making a ClosableIterator also extend AutoCloseable > only adds to the usability of Jena's API while keeping source backwards > compatibility intact. -- This message was sent by Atlassian JIRA (v7.6.3#76005)