Actualización: Como señala @PaulGroke a continuación, las cosas han cambiado con Java 7: ahora es AutoCloseable. Que no está vinculado a las secuencias y es compatible con la nueva construcción try-with-resources.¿Debería utilizarse Closeable como equivalente Java para IDisposable de .NET?
AutoCloseable
es el equivalente directo de Java para la interfaz IDisposable
de .NET.
La interfaz Closeable
introducido en Java 1.5 está estrechamente ligada a las corrientes, e incluso tiene un especificador de excepción para IOException
. Esto sugiere que solo debe usarse para flujos u otras actividades relacionadas con IO, en lugar de la lógica de limpieza de propósito general.
Ciertamente, la descripción del método close()
haría absolutamente ningún sentido fuera de un contexto de secuencia/IO:
void close() throws IOException
Cierra esta corriente y libera los recursos del sistema asociados a ella.
¿Debo declarar, por tanto, mi propia interfaz, Disposable
, con un método Dispose()
en él, y usar eso como un análogo a la interfaz de .NET IDisposable
? ¿O debería volver a usar Closeable
aunque no encaje perfectamente?
@Pharap Hay dos patrones separados para implementar 'IDisposable' mencionado en la página que enlaza. La implementación de 'Object.Finalize()' solo es necesaria en el escenario relativamente raro de que su objeto sea directamente responsable de asignar recursos no administrados (es decir, recursos nativos que no están incluidos en un SafeHandle). Su afirmación de que "la forma recomendada de .NET para implementar 'IDisposable' [...] requiere el uso de' Object.Finalize() '" no es del todo correcto. –