Skip to content

Instantly share code, notes, and snippets.

@electrum
Created May 7, 2015 06:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save electrum/5858c2851d0a85ea5b82 to your computer and use it in GitHub Desktop.
Save electrum/5858c2851d0a85ea5b82 to your computer and use it in GitHub Desktop.
import static java.util.Objects.requireNonNull;
public class Closer<T, X extends Exception>
implements AutoCloseable
{
private final T delegate;
private final Cleaner<T, X> cleaner;
public static <T, X extends Exception> Closer<T, X> closer(T delegate, Cleaner<T, X> cleaner)
{
return new Closer<>(delegate, cleaner);
}
private Closer(T delegate, Cleaner<T, X> cleaner)
{
this.delegate = requireNonNull(delegate, "delegate is null");
this.cleaner = requireNonNull(cleaner, "cleaner is null");
}
public T get()
{
return delegate;
}
@Override
public void close()
throws X
{
cleaner.close(delegate);
}
public interface Cleaner<T, X extends Exception>
{
void close(T object)
throws X;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment