Java 7试用资源

Java 7为完成使用后需要关闭的资源(例如文件,流,数据库连接和套接字)提供了更好的资源管理。 这种语言构造称为try-with-resources语句。 完成这项工作的机制称为AutoCloseable接口。 Java 7资源类均实现此接口。 该接口的签名如下所示:

public interface AutoCloseable {
    void close() throws Exception;
}

它声明了一个方法close(),该方法在try-with-resources语句管理的对象上自动调用。

尽管Java 7资源类实现了此接口,但是您使用的库在很多时候都不会这样做,因为库没有更新为使用AutoCloseable接口,或者项目无法简单地更新为较新的版本。

大多数情况下,这很容易解决。 只是将应该能够参与try-with-resources语句的资源子类化。 以ITextRenderer(形成“飞碟”项目)为例。 使用ITextRenderer完成工作后,应调用finishPDF()方法。 通常,您将在finally块中执行此操作。 通过创建一个从ITextRenderer扩展的新类并实现AutoCloseable接口,该类可以参与自动资源管理。 AutoCloseableITextRenderer如下所示:

public class AutoCloseableITextRenderer extends ITextRenderer implements AutoCloseable {
    @Override
    public void close() {
        super.finishPDF();
    }
}

扩展原始类最有意义,因为子类 ITextRenderer。 如果由于类是最终类而无法扩展,则可以使用composition。

这就是您将如何使用它:

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();
        }

就这样。 请注意,我没有从AutoCloseableITextRenderer中的close()方法引发异常。 AutoCloseable接口的Javadoc对此说明如下:

虽然声明此接口方法引发{@code Exception},但强烈建议实现者声明{@code close}方法的具体实现以引发更具体的异常,或者,如果close操作不会失败,则根本不引发任何异常。

参考:来自Jamie Craane博客博客的JCG合作伙伴 Jamie Craane的Java 7 try-with-resources

翻译自: https://www.javacodegeeks.com/2013/07/java-7-try-with-resources.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值