Update: Wie @PaulGroke unten zeigt, haben sich die Dinge mit Java 7 geändert: Es gibt jetzt AutoCloseable. Das ist nicht an Streams gebunden und wird durch das neue try-with-resources Konstrukt unterstützt.Soll Closeable als Java-Entsprechung für IDisposable von .NET verwendet werden?
AutoCloseable
ist das direkte Java-Äquivalent für die IDisposable
-Schnittstelle von .NET.
Die Closeable
Schnittstelle in Java eingeführt 1.5 ist eng an Ströme gebunden, und hat sogar eine Ausnahme-Spezifizierer für IOException
. Dies deutet darauf hin, dass es nur für Streams oder andere E/A-bezogene Aktivitäten verwendet werden sollte, und nicht für allgemeine Bereinigungslogik.
Gewiß ist die Beschreibung für das close()
Verfahren würde absolut keinen Sinn außerhalb eines Strom/IO Kontext:
void close() throws IOException
Schließt diesen Stream und gibt alle Systemressourcen mit ihm verbunden ist.
Soll ich also meine eigene Schnittstelle erklären, Disposable
, mit einer Dispose()
Methode auf, und verwenden Sie diese als eine Analog .NET IDisposable
-Schnittstelle? Oder sollte ich Closeable
wiederverwenden, obwohl es vielleicht nicht perfekt passt?
@Pharap Es gibt zwei verschiedene Muster für die Implementierung von 'IDisposable' erwähnt auf der Seite, die Sie verknüpfen. Das Implementieren von 'Object.Finalize()' ist nur in dem relativ seltenen Szenario erforderlich, in dem Ihr Objekt direkt für das Zuordnen von nicht verwalteten Ressourcen verantwortlich ist (d. H. Systemeigene Ressourcen, die nicht mit einem SafeHandle umschlossen sind). Ihre Aussage, dass ".NETs empfohlene Methode zur Implementierung von IDisposable" [...] die Verwendung von 'Object.Finalize()' "erfordert, ist nicht ganz korrekt. –