jena-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Schwingenschlögl (JIRA) <j...@apache.org>
Subject [jira] [Created] (JENA-1601) Make ClosableIterator<T> extend AutoCloseable
Date Tue, 11 Sep 2018 11:35:00 GMT
David Schwingenschlögl created JENA-1601:
--------------------------------------------

             Summary: 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


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)

Mime
View raw message