JavaRush /Java блогы /Random-KK /Java 7 ресурстарын қолданып көру
DarthVictor
Деңгей

Java 7 ресурстарын қолданып көру

Топта жарияланған
7-нұсқадан бастап Java ресурстарды басқарудың жақсартылғанын ұсынады, олармен жұмыс аяқталғаннан кейін жабылуы керек. Мұндай ресурстарға, мысалы, файлдар, ағындар, дерекқор қосылымдары және ұяшықтар жатады. Бұл мақсатқа ресурстармен әрекет етудің арнайы тілдік құрылымы қызмет етеді. Бұл автоматты жабу жұмыс істеуі үшін арнайы интерфейс жасалды AutoCloseable. Java 7 ресурстармен сынап көру - 1Java 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(). сәтсіз.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION