JavaRush /Блоги Java /Random-TG /Java 7 кӯшиш бо захираҳо
DarthVictor
Сатҳи

Java 7 кӯшиш бо захираҳо

Дар гурӯҳ нашр шудааст
Аз versionи 7 сар карда, Java идоракунии беҳтари захираҳоро пешниҳод мекунад, ки ҳангоми анҷоми кор бо онҳо бояд баста шаванд. Ба чунин захираҳо, масалан, файлҳо, ҷараёнҳо, пайвастҳои пойгоҳи додаҳо ва розеткаҳо дохил мешаванд. Ба ин мақсад як сохтори махсуси забони try-with-sources хизмат мерасонад. Барои ба кор андохтани ин автоматӣ интерфейси махсус сохта шудааст AutoCloseable. Java 7 кӯшиш бо захираҳо - 1Дар 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()имкон надиҳад. ноком.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION