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-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 ITextRenderer
metod çağırılmalıdır finishPDF()
. Normalda bunu bir blokda edərdiniz finally
. ITextRenderer
Lakin siz interfeysi genişləndirən və həyata keçirən yeni sinif yaratdığınız zaman AutoCloseable
onu try-with-resources
. Yeni sinif AutoCloseableITextRenderer
belə 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 AutoCloseable
bu 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 Exception
olmadıqda istisnaları ümumiyyətlə atmamaları tövsiyə olunur. close()
uğursuz.
GO TO FULL VERSION