JavaRush /Java Blogu /Random-AZ /Java 7 resursları ilə cəhd edin
DarthVictor
Səviyyə

Java 7 resursları ilə cəhd edin

Qrupda dərc edilmişdir
7-ci versiyadan başlayaraq Java, onlarla işləməyi bitirdikdən sonra bağlanmalı olan resursların təkmilləşdirilmiş idarə edilməsini təklif edir. Bu cür resurslara, məsələn, fayllar, axınlar, verilənlər bazası əlaqələri və rozetkalar daxildir. Bu məqsədə resurslarla cəhd etmək üçün xüsusi bir dil konstruksiyası xidmət edir. Bu avtomatik bağlanmanın işləməsi üçün xüsusi interfeys yaradılmışdır AutoCloseable. Java 7 resurslarla cəhd - 1Java 7-də bütün resurs sinifləri bu interfeysi həyata keçirir. Onun imzası belə görünür:
public interface AutoCloseable {
    void close() throws Exception;
}
İnterfeys close()konstruksiya tərəfindən xidmət edilən obyektlərə avtomatik çağırılan metodu elan edir try-with-resources. Java 7-dəki resurs sinifləri bu interfeysi həyata keçirsə də, istifadə etdiyiniz kitabxanaların bir çoxu bunu etmir, çünki ya kitabxana Avtomatik Qapanan interfeys ilə işləmək üçün hələ yenilənməyib, ya da sadəcə olaraq kitabxananı yeniləmək imkanınız yoxdur. Əksər hallarda bu asanlıqla həll edilə bilər. -də iştirak etməli olan resurs sinfini miras alın try-with-resources. Məsələn götürək ITextRenderer(Uçan boşqab layihəsindən). İşi bitirdikdən sonra ITextRenderermetod çağırılmalıdır finishPDF(). Normalda bunu bir blokda edərdiniz finally. ITextRendererLakin siz interfeysi genişləndirən və həyata keçirən yeni sinif yaratdığınız zaman AutoCloseableonu try-with-resources. Yeni sinif AutoCloseableITextRendererbelə görünəcək:
public class AutoCloseableITextRenderer extends ITextRenderer implements AutoCloseable {
    @Override
    public void close() {
        super.finishPDF();
    }
}
Orijinal sinfi nəsildə genişləndirmək ən ağlabatan həlldir, çünki yeni sinif hələ də olacaq ITextRenderer. Orijinal sinif kimi elan edildikdə final, kompozisiya istifadə edilməlidir. Və istifadə belə görünür:
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();
        }
Hamısı budur. close()Nəzərə alın ki, mən AutoCloseableITextRenderer. İnterfeys Javadoc-u AutoCloseablebu barədə aşağıdakıları söyləyir: İnterfeys metodu istisnalar atmaq üçün elan edilsə də , bu metodun icraçılarına metodu həyata keçirərkən daha spesifik istisna siniflərindən istifadə etmələri və ya metod mümkün Exceptionolmadıqda istisnaları ümumiyyətlə atmamaları tövsiyə olunur. close()uğursuz.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION