The problem with Java's AutoCloseable interface is that its close() method is declared to throw a checked exception: void close() throws Exception. This is a problem if you are one of the many programmers who prefer unchecked exceptions over checked ones, because it forces you to deal with checked exceptions every time you write a try-with-resources statement, despite the fact that none of your classes ever throw any checked exceptions on close(). Simply declaring that your class implements AutoCloseable forces checked exceptions upon you.
Luckily, there is a fix for this. Here it is:
public interface AutoCloseable2 extends AutoCloseable { @Override void close(); }There, I fixed it for you.
By declaring a new interface which redefines the close() method as not throwing any checked exceptions, the problem goes away.
P.S.
I just looked at the Oracle documentation for the AutoCloseable interface and found out that this had already been anticipated:
"[...] subclasses of the
AutoCloseable
interface can override this behavior of the close
method to throw specialized exceptions, such as IOException
, or no exception at all."