[PATCH 0/3] RFC: Adding Closeable to various JDK classes
This series of patches adds the java.io.Closeable interface to a few different core JDK classes. Some of them are more obvious/better fits than others; I've split the patch up into groups based on how "out there" I think the idea is. :-) Anyway please comment on these patches. - DML
Add Closeable to core I/O classes and interfaces. This one is a no-brainer - I hope. ;-) Included is java.util.zip.ZipFile, since that class has a close method which exactly matches the Closeable interface specification. - DML -- diff -r 92ea0ac77d2f src/share/classes/java/io/ObjectInput.java --- a/src/share/classes/java/io/ObjectInput.java Tue Apr 22 18:58:40 2008 +0200 +++ b/src/share/classes/java/io/ObjectInput.java Thu May 01 09:58:43 2008 -0500 @@ -36,7 +36,7 @@ package java.io; * @see java.io.ObjectInputStream * @since JDK1.1 */ -public interface ObjectInput extends DataInput { +public interface ObjectInput extends DataInput, Closeable { /** * Read and return an object. The class that implements this interface * defines where the object is "read" from. diff -r 92ea0ac77d2f src/share/classes/java/io/ObjectOutput.java --- a/src/share/classes/java/io/ObjectOutput.java Tue Apr 22 18:58:40 2008 +0200 +++ b/src/share/classes/java/io/ObjectOutput.java Thu May 01 09:58:43 2008 -0500 @@ -36,7 +36,7 @@ package java.io; * @see java.io.ObjectInputStream * @since JDK1.1 */ -public interface ObjectOutput extends DataOutput { +public interface ObjectOutput extends DataOutput, Flushable, Closeable { /** * Write an object to the underlying storage or stream. The * class that implements this interface defines how the object is diff -r 92ea0ac77d2f src/share/classes/java/nio/channels/Selector.java --- a/src/share/classes/java/nio/channels/Selector.java Tue Apr 22 18:58:40 2008 +0200 +++ b/src/share/classes/java/nio/channels/Selector.java Thu May 01 09:58:43 2008 -0500 @@ -25,6 +25,7 @@ package java.nio.channels; +import java.io.Closeable; import java.io.IOException; import java.nio.channels.spi.SelectorProvider; import java.util.Set; @@ -202,7 +203,7 @@ import java.util.Set; * @see SelectionKey */ -public abstract class Selector { +public abstract class Selector implements Closeable { /** * Initializes a new instance of this class. diff -r 92ea0ac77d2f src/share/classes/java/util/zip/ZipFile.java --- a/src/share/classes/java/util/zip/ZipFile.java Tue Apr 22 18:58:40 2008 +0200 +++ b/src/share/classes/java/util/zip/ZipFile.java Thu May 01 09:58:43 2008 -0500 @@ -29,6 +29,7 @@ import java.io.IOException; import java.io.IOException; import java.io.EOFException; import java.io.File; +import java.io.Closeable; import java.util.Vector; import java.util.Enumeration; import java.util.NoSuchElementException; @@ -43,7 +44,7 @@ import java.util.NoSuchElementException; * @author David Connelly */ public -class ZipFile implements ZipConstants { +class ZipFile implements ZipConstants, Closeable { private long jzfile; // address of jzfile data private String name; // zip file name private int total; // total number of entries
Add Closeable to two util classes: Scanner, and the JDK logging Handler class. -- diff -r 92ea0ac77d2f src/share/classes/java/util/Scanner.java --- a/src/share/classes/java/util/Scanner.java Tue Apr 22 18:58:40 2008 +0200 +++ b/src/share/classes/java/util/Scanner.java Thu May 01 09:58:43 2008 -0500 @@ -342,7 +342,7 @@ import sun.misc.LRUCache; * * @since 1.5 */ -public final class Scanner implements Iterator<String> { +public final class Scanner implements Iterator<String>, Closeable { // Internal buffer used to hold input private CharBuffer buf; diff -r 92ea0ac77d2f src/share/classes/java/util/logging/Handler.java --- a/src/share/classes/java/util/logging/Handler.java Tue Apr 22 18:58:40 2008 +0200 +++ b/src/share/classes/java/util/logging/Handler.java Thu May 01 09:58:43 2008 -0500 @@ -27,6 +27,8 @@ package java.util.logging; package java.util.logging; import java.io.UnsupportedEncodingException; +import java.io.Closeable; + /** * A <tt>Handler</tt> object takes log messages from a <tt>Logger</tt> and * exports them. It might for example, write them to a console @@ -45,7 +47,7 @@ import java.io.UnsupportedEncodingExcept * @since 1.4 */ -public abstract class Handler { +public abstract class Handler implements Closeable { private static final int offValue = Level.OFF.intValue(); private LogManager manager = LogManager.getLogManager(); private Filter filter;
Add Closeable to MIDI and sound channel classes. Though the close() method on these classes don't throw an exception, they still could implement this interface. - DML -- diff -r 92ea0ac77d2f src/share/classes/javax/sound/midi/MidiDevice.java --- a/src/share/classes/javax/sound/midi/MidiDevice.java Tue Apr 22 18:58:40 2008 +0200 +++ b/src/share/classes/javax/sound/midi/MidiDevice.java Thu May 01 09:58:43 2008 -0500 @@ -26,6 +26,7 @@ package javax.sound.midi; package javax.sound.midi; import java.util.List; +import java.io.Closeable; /** * <code>MidiDevice</code> is the base interface for all MIDI devices. @@ -107,7 +108,7 @@ import java.util.List; * @author Florian Bomers */ -public interface MidiDevice { +public interface MidiDevice extends Closeable { /** diff -r 92ea0ac77d2f src/share/classes/javax/sound/midi/Receiver.java --- a/src/share/classes/javax/sound/midi/Receiver.java Tue Apr 22 18:58:40 2008 +0200 +++ b/src/share/classes/javax/sound/midi/Receiver.java Thu May 01 09:58:43 2008 -0500 @@ -25,6 +25,8 @@ package javax.sound.midi; +import java.io.Closeable; + /** * A <code>Receiver</code> receives <code>{@link MidiEvent}</code> objects and @@ -38,7 +40,7 @@ package javax.sound.midi; * * @author Kara Kytle */ -public interface Receiver { +public interface Receiver extends Closeable { //$$fb 2002-04-12: fix for 4662090: Contradiction in Receiver specification diff -r 92ea0ac77d2f src/share/classes/javax/sound/midi/Transmitter.java --- a/src/share/classes/javax/sound/midi/Transmitter.java Tue Apr 22 18:58:40 2008 +0200 +++ b/src/share/classes/javax/sound/midi/Transmitter.java Thu May 01 09:58:43 2008 -0500 @@ -25,6 +25,8 @@ package javax.sound.midi; +import java.io.Closeable; + /** * A <code>Transmitter</code> sends <code>{@link MidiEvent}</code> objects to one or more @@ -35,7 +37,7 @@ package javax.sound.midi; * * @author Kara Kytle */ -public interface Transmitter { +public interface Transmitter extends Closeable { /** diff -r 92ea0ac77d2f src/share/classes/javax/sound/sampled/Line.java --- a/src/share/classes/javax/sound/sampled/Line.java Tue Apr 22 18:58:40 2008 +0200 +++ b/src/share/classes/javax/sound/sampled/Line.java Thu May 01 09:58:43 2008 -0500 @@ -24,6 +24,8 @@ */ package javax.sound.sampled; + +import java.io.Closeable; /** * The <code>Line</code> interface represents a mono or multi-channel @@ -70,7 +72,7 @@ package javax.sound.sampled; * @see LineEvent * @since 1.3 */ -public interface Line { +public interface Line extends Closeable { /** * Obtains the <code>Line.Info</code> object describing this
Seems like a desirable specification change. All we need now is a process for changing the Java SE specification. On Thu, May 1, 2008 at 8:07 AM, David M. Lloyd <david.lloyd@redhat.com> wrote:
This series of patches adds the java.io.Closeable interface to a few different core JDK classes. Some of them are more obvious/better fits than others; I've split the patch up into groups based on how "out there" I think the idea is. :-)
Anyway please comment on these patches.
- DML
participants (2)
-
David M. Lloyd
-
Neal Gafter