package com.googlecode.totallylazy.collections;
import com.googlecode.totallylazy.Closeables;
import java.io.Closeable;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import static com.googlecode.totallylazy.Sequences.sequence;
public interface CloseableList<T extends Closeable> extends List<T>, Closeable {
<S extends T> S manage(S instance);
public static class constructors {
@SuppressWarnings("unchecked")
public static <T extends Closeable> CloseableList<T> closeableList(Class<T> aClass) {
return closeableList();
}
@SafeVarargs
public static <T extends Closeable> CloseableList<T> closeableList(T... items) {
return closeableList(new CopyOnWriteArrayList<T>(items));
}
public static <T extends Closeable> CloseableList<T> closeableList(List<? super T> items) {
return new CloseableDelegatingList<T>(items);
}
private static class CloseableDelegatingList<T extends Closeable> extends DelegatingList<T> implements CloseableList<T> {
public CloseableDelegatingList(List<? super T> items) {super(items);}
public void close() throws IOException {
sequence(delegate).each(Closeables.safeClose());
delegate.clear();
}
public <S extends T> S manage(S instance) {
add(instance);
return instance;
}
}
}
}