7-versionсынан баштап, Java ресурстарды жакшыртылган башкарууну сунуштайт, алар менен иштөө аяктагандан кийин жабылышы керек. Мындай ресурстарга, мисалы, файлдар, агымдар, маалыматтар базасынын байланыштары жана розеткалары кирет. Бул максатты атайын тилдик түзүлүш менен сынап көргүлө. Бул автоматтык түрдө жабылышы үчүн атайын интерфейс түзүлдү
AutoCloseable
. Java 7де бардык ресурс класстары бул интерфейсти ишке ашырат. Анын кол тамгасы мындай көрүнөт:
public interface AutoCloseable {
void close() throws Exception;
}
Интерфейс close()
конструкция тейлеген an objectтерде автоматтык түрдө чакырылган ыкманы жарыялайт try-with-resources
. Java 7деги ресурстук класстар бул интерфейсти ишке ашырса да, сиз колдонгон китепканалардын көбү жок, себеби китепкана AutoCloseable интерфейси менен иштөө үчүн жаңыртыла элек же сизде китепкананы жаңыртуу мүмкүнчүлүгү жок. Көпчүлүк учурларда бул оңой эле чечилет. катышууга тийиш болгон ресурс классын мурастап алыңыз 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()
ийгorксиз.
GO TO FULL VERSION