JavaRush /Blog Java /Random-VI /Tài nguyên dùng thử Java 7
DarthVictor
Mức độ

Tài nguyên dùng thử Java 7

Xuất bản trong nhóm
Bắt đầu từ phiên bản 7, Java cung cấp khả năng quản lý tài nguyên được cải thiện và sẽ được đóng khi làm việc xong với chúng. Các tài nguyên như vậy bao gồm, ví dụ: tệp, luồng, kết nối cơ sở dữ liệu và ổ cắm. Mục đích này được phục vụ bởi một ngôn ngữ đặc biệt được xây dựng bằng tài nguyên dùng thử. Để tính năng tự động đóng này hoạt động, một giao diện đặc biệt đã được tạo AutoCloseable. Tài nguyên dùng thử Java 7 - 1Trong Java 7, tất cả các lớp tài nguyên đều triển khai giao diện này. Chữ ký của nó trông như thế này:
public interface AutoCloseable {
    void close() throws Exception;
}
Giao diện khai báo một phương thức close()được gọi tự động trên các đối tượng được phục vụ bởi cấu trúc try-with-resources. Mặc dù các lớp tài nguyên trong Java 7 triển khai giao diện này nhưng nhiều thư viện bạn sử dụng lại không làm như vậy, có thể do thư viện chưa được cập nhật để hoạt động với giao diện AutoClosizable hoặc đơn giản là bạn không có khả năng cập nhật thư viện. Trong hầu hết các trường hợp, điều này có thể được giải quyết dễ dàng. Kế thừa lớp tài nguyên sẽ tham gia vào try-with-resources. Hãy lấy ví dụ ITextRenderer(từ dự án Đĩa bay). Sau khi làm việc xong với ITextRenderer, phương thức này sẽ được gọi finishPDF(). Thông thường bạn sẽ làm điều này trong một khối finally. Nhưng khi bạn tạo một lớp mới mở rộng ITextRenderervà triển khai giao diện AutoCloseable, bạn có thể đưa nó vào tệp try-with-resources. Lớp mới AutoCloseableITextRenderersẽ trông như thế này:
public class AutoCloseableITextRenderer extends ITextRenderer implements AutoCloseable {
    @Override
    public void close() {
        super.finishPDF();
    }
}
Mở rộng lớp gốc ở lớp con là giải pháp hợp lý nhất, vì lớp mới vẫn sẽ là ITextRenderer. Trong trường hợp lớp ban đầu được khai báo là final, thành phần phải được sử dụng. Và đây là cách sử dụng sẽ như thế nào:
try (final AutoCloseableITextRenderer iTextRenderer = new AutoCloseableITextRenderer()) {
            ByteArrayOutputStream out; // contains the data to be converted to PDF, not shown here.
            iTextRenderer.setDocumentFromString(new String(out.toByteArray()));
            iTextRenderer.layout();
            iTextRenderer.createPDF(pdfOutputStream);
            pdfOutputStream.flush();
        }
Đó là tất cả. Xin lưu ý rằng tôi không đưa ra ngoại lệ từ một phương thức close()trong tệp AutoCloseableITextRenderer. Javadoc của giao diện AutoCloseablenói như sau về điều này: Mặc dù phương thức giao diện được khai báo để ném ngoại lệ Exception, nhưng những người triển khai phương thức này được khuyến nghị sử dụng các lớp ngoại lệ cụ thể hơn khi triển khai phương thức hoặc hoàn toàn không ném ngoại lệ nếu phương thức đó close()không thể thất bại.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION