Cập nhật: Khi @PaulGroke chỉ ra bên dưới, mọi thứ đã thay đổi với Java 7: hiện tại có AutoCloseable. Không được gắn với luồng và được hỗ trợ bởi cấu trúc try-with-resources mới.Nên có thể sử dụng được như là tương đương Java cho .NET's IDisposable?
AutoCloseable
là tương đương Java trực tiếp cho giao diện IDisposable
của .NET.
Giao diện Closeable
giới thiệu trong Java 1.5 gắn liền chặt chẽ với suối, và thậm chí còn có một ngoại lệ cho specifier IOException
. Điều này cho thấy rằng nó chỉ nên được sử dụng cho các luồng hoặc các hoạt động liên quan đến IO khác, thay vì logic dọn dẹp mục đích chung.
Chắc chắn mô tả cho phương pháp close()
sẽ làm cho hoàn toàn không có cảm giác bên ngoài của một bối cảnh dòng/IO:
void close() throws IOException
Đóng dòng này và phiên bản bất kỳ tài nguyên hệ thống liên kết với nó.
Tôi có nên do đó tuyên bố giao diện của riêng tôi, Disposable
, với một phương pháp Dispose()
vào nó, và sử dụng như một chất tương tự với giao diện IDisposable
NET không? Hoặc tôi có nên sử dụng lại Closeable
mặc dù nó có thể không hoàn toàn phù hợp không?
@Pharap Có hai mẫu riêng biệt để triển khai 'IDisposable' được đề cập trên trang bạn liên kết tới. Việc triển khai 'Object.Finalize()' chỉ được yêu cầu trong kịch bản tương đối hiếm hoi mà đối tượng của bạn chịu trách nhiệm trực tiếp về phân bổ tài nguyên không được quản lý (tức là tài nguyên gốc không được bao bọc với SafeHandle). Câu lệnh của bạn rằng "cách đề xuất của .NET để thực hiện' IDisposable' [...] yêu cầu sử dụng 'Object.Finalize()' "không hoàn toàn chính xác. –