implements Closeable or implements AutoCloseable
AutoCloseable
(introduced in Java 7) makes it possible to use the try-with-resources idiom:
public class MyResource implements AutoCloseable {
public void close() throws Exception {
System.out.println("Closing!");
}
}
Now you can say:
try (MyResource res = new MyResource()) {
// use resource here
}
and JVM will call close()
automatically for you.
Closeable
is an older interface. For some reason To preserve backward compatibility, language designers decided to create a separate one. This allows not only all Closeable
classes (like streams throwing IOException
) to be used in try-with-resources, but also allows throwing more general checked exceptions from close()
.
When in doubt, use AutoCloseable
, users of your class will be grateful.
Closeable
extends AutoCloseable
, and is specifically dedicated to IO streams: it throws IOException
instead of Exception
, and is idempotent, whereas AutoCloseable
doesn't provide this guarantee.
This is all explained in the javadoc of both interfaces.
Implementing AutoCloseable
(or Closeable
) allows a class to be used as a resource of the try-with-resources construct introduced in Java 7, which allows closing such resources automatically at the end of a block, without having to add a finally
block which closes the resource explicitly.
Your class doesn't represent a closeable resource, and there's absolutely no point in implementing this interface: an IOTest
can't be closed. It shouldn't even be possible to instantiate it, since it doesn't have any instance method. Remember that implementing an interface means that there is a is-a relationship between the class and the interface. You have no such relationship here.