JavaRush /Java Blog /Random-ID /Java 7 coba-dengan-sumber daya
DarthVictor
Level 28

Java 7 coba-dengan-sumber daya

Dipublikasikan di grup Random-ID
Dimulai dengan versi 7, Java menawarkan peningkatan pengelolaan sumber daya yang harus ditutup setelah selesai bekerja dengannya. Sumber daya tersebut mencakup, misalnya, file, aliran, koneksi database, dan soket. Tujuan ini dilayani oleh konstruksi bahasa khusus try-with-resources. Agar penutupan otomatis ini dapat berfungsi, antarmuka khusus telah dibuat AutoCloseable. Java 7 coba-dengan-sumber daya - 1Di Java 7, semua kelas sumber daya mengimplementasikan antarmuka ini. Tanda tangannya terlihat seperti ini:
public interface AutoCloseable {
    void close() throws Exception;
}
Antarmuka mendeklarasikan metode close()yang secara otomatis dipanggil pada objek yang dilayani oleh konstruk try-with-resources. Meskipun kelas sumber daya di Java 7 mengimplementasikan antarmuka ini, banyak perpustakaan yang Anda gunakan tidak menerapkannya, baik karena perpustakaan belum diperbarui untuk bekerja dengan antarmuka AutoCloseable atau Anda tidak memiliki kemampuan untuk memperbarui perpustakaan. Dalam kebanyakan kasus, hal ini dapat diselesaikan dengan mudah. Mewarisi kelas sumber daya yang harus berpartisipasi dalam try-with-resources. Mari kita ambil contoh ITextRenderer(dari proyek Piring Terbang). Setelah selesai bekerja ITextRenderer, metode tersebut harus dipanggil finishPDF(). Biasanya Anda akan melakukan ini dalam satu blok finally. Namun saat Anda membuat kelas baru yang memperluas ITextRendererdan mengimplementasikan antarmuka AutoCloseable, Anda dapat memasukkannya ke dalam kelas try-with-resources. Kelas baru AutoCloseableITextRendererakan terlihat seperti ini:
public class AutoCloseableITextRenderer extends ITextRenderer implements AutoCloseable {
    @Override
    public void close() {
        super.finishPDF();
    }
}
Memperluas kelas asli secara turunan adalah solusi paling masuk akal, karena kelas baru akan tetap ITextRenderer. Jika kelas asli dideklarasikan sebagai final, komposisi harus digunakan. Dan seperti inilah tampilan penggunaannya:
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();
        }
Itu saja. Harap dicatat bahwa saya tidak memberikan pengecualian dari suatu metode close()di file AutoCloseableITextRenderer. Javadoc antarmuka AutoCloseablemengatakan hal berikut tentang hal ini: Meskipun metode antarmuka dinyatakan membuang pengecualian Exception, pelaksana metode ini sangat disarankan untuk menggunakan kelas pengecualian yang lebih spesifik saat mengimplementasikan metode, atau tidak membuang pengecualian sama sekali jika metode close()tidak dapat gagal.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION