JavaRush /Java blogi /Random-UZ /Java 7 manbalar bilan sinab ko'ring
DarthVictor
Daraja

Java 7 manbalar bilan sinab ko'ring

Guruhda nashr etilgan
7-versiyadan boshlab Java resurslarni boshqarishni takomillashtiradi, ular bilan ishlash tugagach yopilishi kerak. Bunday resurslarga, masalan, fayllar, oqimlar, ma'lumotlar bazasi ulanishlari va rozetkalar kiradi. Bu maqsadga "Resurslar bilan sinab ko'ring" maxsus til konstruktsiyasi xizmat qiladi. Ushbu avtomatik yopilish ishlashi uchun maxsus interfeys yaratilgan AutoCloseable. Java 7 resurslarni sinab ko'rish - 1Java 7 da barcha resurs sinflari ushbu interfeysni amalga oshiradi. Uning imzosi quyidagicha ko'rinadi:
public interface AutoCloseable {
    void close() throws Exception;
}
Interfeys close()konstruksiya tomonidan xizmat ko'rsatadigan ob'ektlarda avtomatik ravishda chaqiriladigan usulni e'lon qiladi try-with-resources. Java 7-dagi resurs sinflari ushbu interfeysni amalga oshirsa-da, siz foydalanadigan ko'pgina kutubxonalar yo'q, chunki kutubxona hali Avtomatik yopiladigan interfeys bilan ishlash uchun yangilanmagan yoki siz kutubxonani yangilash imkoniga ega emassiz. Aksariyat hollarda bu muammoni osongina hal qilish mumkin. da ishtirok etishi kerak bo'lgan resurs sinfini meros qilib oling try-with-resources. ITextRendererMisol uchun (Uchar likopcha loyihasidan) olaylik . U bilan ishlashni tugatgandan so'ng ITextRenderer, usul chaqirilishi kerak finishPDF(). Odatda siz buni blokda qilasiz finally. ITextRendererLekin interfeysni kengaytiruvchi va amalga oshiradigan yangi sinf yaratganingizda AutoCloseable, uni try-with-resources. Yangi sinf AutoCloseableITextRendererquyidagicha ko'rinadi:
public class AutoCloseableITextRenderer extends ITextRenderer implements AutoCloseable {
    @Override
    public void close() {
        super.finishPDF();
    }
}
Asl sinfni avlodda kengaytirish eng oqilona yechimdir, chunki yangi sinf hali ham bo'ladi ITextRenderer. Agar asl sinf sifatida e'lon qilingan bo'lsa final, kompozitsiyadan foydalanish kerak. Va foydalanish quyidagicha ko'rinadi:
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();
        }
Ana xolos. close()Iltimos, esda tutingki, men usulidan istisno qilmadim AutoCloseableITextRenderer. Interfeysning Javadoc dasturi AutoCloseablebu haqda quyidagilarni aytadi: Garchi interfeys usuli istisnolarni tashlash uchun e'lon qilingan bo'lsa-da Exception, ushbu usulni amalga oshiruvchilarga usulni amalga oshirishda aniqroq istisno sinflaridan foydalanish tavsiya etiladi yoki agar usul buni amalga close()oshira olmasa , istisnolarni umuman tashlamaslik tavsiya etiladi. muvaffaqiyatsiz.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION