Cursor cursor = null; try { cursor = db.openCursor(null,null); // do stuff } finally { if (cursor != null) cursor.close(); }
但最近,由于可读性和懒惰的原因,我已经开始这样做了:
Cursor cursor = db.openCursor(null,null); try { // do stuff } finally { cursor.close(); }
我的错误是将游标(jdbc handle,whatever)分配给try-catch-finally块吗?
除了JVM实际上在作业上,或任务和第一行之间的任何东西在尝试块我不知道我的旧风格是否借出任何额外的价值,而第二个肯定更可读和简明扼要.文学generally总是与第一风格一起去.
编辑 – 假设我很高兴openCursor抛出的任何异常,而初始化游标不被捕获在这个代码块中,我唯一关心的是这个例子是关闭游标,如果它被分配&打开.还假设我正在测试nulls等..等.. yadda … yadda …(我已经改变了例子来反映这一点,这不是我的问题的焦点,所以我没有把它包括在第一版)
解决方法
正如其他人所暗示的,注意事项是,如果您正在进行额外的初始化,需要自己清理,那么逻辑上必须进入finally {}并相应地更改范围.虽然我认为在这种情况下进行重组.
底线:写的第一个版本是不必要的复杂.第二个版本是正确的.
编辑:结合我的其他评论为后代…
第一个例子似乎是无害的,因为它所做的只是添加一堆不必要的代码. (完全不需要,如果不清楚)然而,在经典的“更多的代码意味着更多的潜在的错误”的时尚,有一个隐藏的骗子.
如果由于某些原因“//做某事”代码无意中清除了游标变量,那么您将默认泄漏游标,而在您至少得到NullPointerException之前.由于额外的代码绝对没有用处,因此额外的风险是完全不必要的.
因此,我愿意把第一个例子称为“简单的错误”.我一定会在代码审查中标记.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。