001/**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package org.apache.commons.rdf.rdf4j;
019
020/**
021 * An {@link Iterable} which should be {@link #close()}d after use.
022 * <p>
023 * A good pattern to use this iterator is with an outer try-with-resources
024 * block: <code>
025 * for (ClosableIterable&lt;Triple&gt; triples : graph.iterate()) {
026 *     for (Triple t : triples) {
027 *       return t; // OK to terminate for-loop early
028 *     }
029 * }
030 * </code> The above will ensure that underlying resources are closed even if
031 * the iteration does not exhaust all triples.
032 *
033 * @param <T>
034 *            type of elements returned by the iterator
035 */
036public interface ClosableIterable<T> extends Iterable<T>, AutoCloseable {
037
038}