Soll Closeable als Java-Entsprechung für IDisposable von .NET verwendet werden?
Update: @PaulGroke Punkte unten, die Dinge haben sich geändert bei Java 7: es ist jetzt AutoCloseable. Das ist nicht gebunden an Bächen und unterstützt durch das neue try-mit-Ressourcen konstruieren.
AutoCloseable
ist die direkte Java-äquivalent .NET IDisposable
- Schnittstelle.
Den Closeable
- Schnittstelle eingeführt in Java 1.5 ist eng gebunden an Bächen, und hat sogar eine Ausnahme Planer für IOException
. Dies deutet darauf hin, dass es sollte nur verwendet werden, für streams oder andere IO-Aktivitäten, sondern als Allzweck-cleanup-Logik.
Sicherlich die Beschreibung für die close()
Methode würde absolut keinen Sinn außerhalb eines stream/IO-Kontext:
void close() throws IOException
Schließt das stream und releases alle system-Ressourcen zugeordnet.
Sollte ich erklären daher meine eigene Schnittstelle Disposable
mit Dispose()
- Methode auf, und verwenden, die als ein Analogon zu .NET IDisposable
- Schnittstelle? Oder sollte ich re-verwenden Closeable
auch wenn es vielleicht nicht eine perfekte Passform?
InformationsquelleAutor der Frage Daniel Fortunov | 2009-07-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Insbesondere angesichts der Tatsache, dass close() wirft eine IOException, die Sie dann schreiben, exception-handling-code, ich würde Ihnen raten, Ihre eigene Schnittstelle zu schreiben. Diese Schnittstelle kann dann werfen Sie aktivierte Ausnahmen, die geeignet sind, die Verwendung, die Sie möchten, setzen Sie die Schnittstelle auf.
Schnittstellen dazu neigen, zu bedeuten, die Absicht in den Verstand des Lesers, so dass eine Klasse implementieren, die eine IO-assoziierten Verschließbar-Schnittstelle wird der Leser davon ausgehen, die Klasse ist auch IO-basiert.
Offensichtlich, wenn die Objekte, die Sie wollen, um in der Nähe sind alle IO-Verwandte, die Sie verwenden sollten Verschließbar sein. Aber ansonsten gehen Sie für
InformationsquelleAutor der Antwort Zarkonnen
Ich bin sicher, die meisten Menschen sind sich dessen bewusst, aber da diese Frage immer noch unter den top-Ergebnissen bei der Suche nach "IDisposable " Java" (#2 Ergebnis für mich gerade jetzt), und es ist immer noch nicht hier erwähnt...
Dinge haben sich geändert bei Java 7: es ist jetzt AutoCloseable. Das ist nicht gebunden an Bächen und unterstützt durch das neue try-mit-Ressourcen konstruieren.
InformationsquelleAutor der Antwort Paul Groke
Bei der Umsetzung
Closeable
(oderAutoClosable
für diese Angelegenheit) eine Klasse es ist auch möglich, nur das auslassen der throws-Deklaration:Also wenn jemand auf ein typisiertes Objekt, das Sie aufrufen können
close()
zimmerreserviereung, ohne das Sie nichts fangen:Es ist auch kompatibel mit alles erwarten
Closeable
: wenn das Objekt übergeben wird in irgendwo, dass die GriffeCloseable
Sie bereits antizipieren eine Ausnahme und behandeln Sie es richtig, wenn auch vergeblich, in diesem Fall.Diese umfasst Bibliotheken, wie Guave
Closeables
und Java 7 try-mit-Ressourcen wie Paul Groke schlägt vor:Es eine seltene Nachteil aber: Sie können nicht wieder die Ausnahme in Kind-Klassen, sobald es entfernt:
InformationsquelleAutor der Antwort TWiStErRob