为了账号安全,请及时绑定邮箱和手机立即绑定

利用Closeable优化流程

标签:
Java

java7提供了Closeable接口,配合try-with-resource可以简化文件的读取操作。在没有try-with-resource之前。文件编写的规则模板如下

try{
	xxx
}catch(Exception e){
	xxx
}finally{
	try{
	    ff.close()
	}catch(Exception e){
		xxx
	}
}

为了保证功能正确。这个写法特别模板化,写的代码特别长。利用try-with-resource可以省略掉finally里的复杂过程。

try(xx){
	xxx
}catch(Exception e){
	xxx
}

虽然try-with-resource是给文件等资源做的一种精简写法的语法糖。但是他也可以应用在非资源的情况下,虽然 IOException 是无法省略的。
我们可以利用这个来让代码更好看,更安全。只要涉及到finally的部分。例如锁,在同一个代码块里完成是需要用finally来保证锁必须释放。避免后续因为代码问题导致的锁无法释放。我们选择用closeable来做改进。

public class LockAutocloseable implements Closeable {
    private ReentrantLock reentrantLock = new ReentrantLock();

    public void lock(){
        reentrantLock.lock();
    }

    @Override
    public void close() throws IOException {
        System.out.println("unlock");
        reentrantLock.unlock();
    }

这里我们选择用一个类实现Closeable,并且包装ReentrantLock。在close里做unlock操作。那我们如何去使用这个类呢。

    public static void main(String[] args) throws IOException {
        try (LockAutocloseable lockAutocloseable = new LockAutocloseable()){
            lockAutocloseable.lock();
        }
    }

这里是把这个IOException给抛出来了。实际应该有catch的过程的。
这里只是用ReentrantLock做个例子,在现实的案例中,zk的锁,redis的锁,都可以这样处理。
这个精简了finally的流程。看起来非常清爽。但是他的使用限制也很明显。那就是finally必须是当前的代码块释放。这里限制了灵活性。之前的分开的写法是可以做一些灵活的写法。适配一些特殊的场景。用了try-with-resource就舍弃了一定的灵活。

小结

  1. try-with-resource可以适配所有的finally的场景。
  2. try-with-resource可以让代码更精简。
  3. 使用 try-with-resource会舍弃一些灵活性。
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.6万
获赞与收藏
380

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 1
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消