Aktualizacja: Jak zaznaczono @PaulGroke poniżej, sytuacja uległa zmianie w Java 7: teraz jest AutoCloseable. Który nie jest powiązany ze strumieniami i obsługiwany przez nowy konstrukt try-with-resources.Powinny być używane jako odpowiednik Java dla IDisposable .NET?
AutoCloseable
to bezpośredni odpowiednik Java dla interfejsu .NET o numerze IDisposable
.
Interfejs Closeable
wprowadzono Java 1.5 jest ściśle związany ze strumieniami, a nawet ma specyfikator wyjątku dla IOException
. Sugeruje to, że powinien on być używany wyłącznie do strumieni lub innych działań związanych z IO, a nie do logiki ogólnego czyszczenia.
pewnością opisu sposobu close()
stałaby absolutnie żadnego sensu poza kontekst strumień/IO:
void close() throws IOException
Zamyka ten strumień i zwalnia zasoby systemowe związane wszelkie z nim.
Mam zatem zadeklarować własną interfejs, Disposable
, z Dispose()
sposobu na to, i użyć jej jako analogowego na IDisposable
interfejsu .NET za? Czy powinienem ponownie użyć Closeable
, nawet jeśli nie jest to idealne dopasowanie?
@Pharap Istnieją dwa oddzielne wzory do implementacji 'IDisposable' wymienione na stronie, do której prowadzi łącze. Wdrożenie 'Object.Finalize()' jest wymagane tylko w stosunkowo rzadkim scenariuszu, w którym obiekt jest bezpośrednio odpowiedzialny za przydzielanie zasobów niezarządzanych (tj. Zasobów natywnych, które nie są pakowane w SafeHandle). Twoje stwierdzenie, że "zalecany sposób .NET do wdrożenia' IDisposable' [...] wymaga użycia 'Object.Finalize()' "nie jest całkowicie poprawny. –