Mise à jour: Comme l'indique @PaulGroke ci-dessous, les choses ont changé avec Java 7: il y a maintenant AutoCloseable. Ce qui n'est pas lié aux flux et supporté par la nouvelle construction try-with-resources.Doit-on utiliser Closeable comme équivalent Java pour l'IDisposable de .NET?
AutoCloseable
est l'équivalent Java direct de l'interface IDisposable
de .NET.
L'interface Closeable
introduite dans Java 1.5 est étroitement liée à des flux, et a même un spécificateur d'exception pour IOException
. Cela suggère qu'il ne devrait être utilisé que pour des flux ou d'autres activités liées aux opérations d'information, plutôt que pour une logique de nettoyage générale.
Certes, la description de la méthode close()
ferait absolument aucun sens en dehors d'un contexte flux/IO:
void close() throws IOException
ce flux et Closes libère toutes les ressources système qui lui sont associés.
Dois-je déclarer donc ma propre interface, Disposable
, avec une méthode Dispose()
sur elle, et l'utiliser comme un analogue à l'interface de .NET IDisposable
? Ou devrais-je réutiliser Closeable
même si ce n'est pas un ajustement parfait?
@Pharap Il existe deux modèles distincts pour implémenter 'IDisposable' mentionnés sur la page à laquelle vous liez. L'implémentation de 'Object.Finalize()' n'est requise que dans le scénario relativement rare où votre objet est directement responsable de l'allocation de ressources non gérées (c'est-à-dire des ressources natives qui ne sont pas encapsulées avec un SafeHandle). Votre affirmation que "la méthode recommandée par .NET pour implémenter' IDisposable "[...] nécessite l'utilisation de' Object.Finalize() '" n'est pas tout à fait correcte. –