7-нұсқадан бастап Java ресурстарды басқарудың жақсартылғанын ұсынады, олармен жұмыс аяқталғаннан кейін жабылуы керек. Мұндай ресурстарға, мысалы, файлдар, ағындар, дерекқор қосылымдары және ұяшықтар жатады. Бұл мақсатқа ресурстармен әрекет етудің арнайы тілдік құрылымы қызмет етеді. Бұл автоматты жабу жұмыс істеуі үшін арнайы интерфейс жасалды
AutoCloseable
. Java 7-де барлық ресурс кластары осы интерфейсті жүзеге асырады. Оның қолтаңбасы келесідей:
public interface AutoCloseable {
void close() throws Exception;
}
Интерфейс close()
құрылыммен қызмет көрсететін an objectілерде автоматты түрде шақырылатын әдісті жариялайды try-with-resources
. Java 7-дегі ресурс сыныптары бұл интерфейсті жүзеге асырғанымен, сіз пайдаланатын кітапханалардың көбісі кітапхана Автоматты жабылатын интерфейспен жұмыс істеу үшін әлі жаңартылмағандықтан немесе сізде кітапхананы жаңарту мүмкіндігіңіз болмағандықтан орындалмайды. Көп жағдайда бұл оңай шешіледі. Қатысу керек ресурс класын иеленіңіз try-with-resources
. ITextRenderer
Мысалы (Ұшатын табақша жобасынан) алайық . Жұмысты аяқтағаннан кейін ITextRenderer
әдісті шақыру керек finishPDF()
. Әдетте сіз мұны блокта жасайсыз finally
. ITextRenderer
Бірақ интерфейсті кеңейтетін және жүзеге асыратын жаңа класс жасағанда AutoCloseable
, оны try-with-resources
. Жаңа сынып AutoCloseableITextRenderer
келесідей болады:
public class AutoCloseableITextRenderer extends ITextRenderer implements AutoCloseable {
@Override
public void close() {
super.finishPDF();
}
}
Түпнұсқа сыныпты ұрпаққа кеңейту - ең ақылға қонымды шешім, өйткені жаңа сынып әлі де болады ITextRenderer
. Түпнұсқа класс ретінде жарияланған жағдайда final
композиция қолданылуы керек. Және бұл пайдалану келесідей болады:
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();
}
Осымен болды. close()
-дегі әдістен ерекшелік тастамағанымды ескеріңіз AutoCloseableITextRenderer
. Интерфейстің Javadoc бағдарламасы AutoCloseable
бұл туралы мынаны айтады: Интерфейс әдісі ерекше жағдайларды шығару үшін жарияланғанымен Exception
, бұл әдісті жүзеге асырушыларға әдісті жүзеге асыру кезінде ерекше ерекшелік сыныптарын пайдалану немесе әдіс мүмкін болмаса, ерекшеліктерді мүлдем шығармау ұсынылады close()
. сәтсіз.
GO TO FULL VERSION