【发布时间】:2021-01-07 14:34:14
【问题描述】:
在代码审查期间,我发现了以下代码 sn-p:
try (
Connection con = new SqlSessionFactoryBuilder()
.build(configuration)
.buildFactory()
.openSession()
.getConnection()
){
// do stuff here with 'con' and not close anything
}
Session、Connection、SqlSessionFactory 是 iBatis 的实现,但问题是对 Closable 接口的任何“堆叠”实现感兴趣。
我假设“尝试使用资源”关闭资源,即实例化 - con 在这种情况下。通常你会分别关闭会话和连接。如果使用上面的代码 close() 方法只会在 con 对象上被调用,所以 session 不是显式调用并将依赖垃圾回收?
使用以下代码会不会更好:
try (
Session session = new SqlSessionFactoryBuilder()
.build(configuration)
.buildFactory()
.openSession();
Connection con = session.getConnection();
){
// do stuff here with 'con' and not close anything
}
后一种方法在我看来似乎更干净,因为它应该正确调用 close()。还是我的解释有误,只是样板代码?
【问题讨论】:
-
这可能是codereview 比 StackOverflow 更好的问题。就我而言,我认为您的想法是正确的,这可能是您应该在代码审查中提出并更改的内容 - 毕竟正是因为这个原因,才允许使用这种
try语法。 -
我认为它适合这里,因为它更多的是语言功能或语言机制问题,而不是代码抛光。感谢您的评论!