我试图避免mutables变量,但问题是我必须访问我需要在try内部初始化的val(这是一个迁移失败的db操作),我需要在finally块中使用var
我尝试了几种替代方案:
在try块中声明val
try { val resultSet = sql(sql).resultSet return ColumnInfo(resultSet.getMetaData) } catch { case e => throw new ColumnInfoException("Error getting Metadata") } finally { resultSet.close } error: not found: value resultSet
在try块之外声明val而不初始化它
val resultSet: java.sql.ResultSet try { resultSet = sql(sql).resultSet return ColumnInfo(resultSet.getMetaData) } catch { case e => throw new ColumnInfoException("Error getting Metadata") } finally { resultSet.close } error: only classes can have declared but undefined members
使用var,这似乎有效
var resultSet: java.sql.ResultSet = null try { resultSet = sql(sql).resultSet return ColumnInfo(resultSet.getMetaData) } catch { case e => throw new ColumnInfoException("Error getting Metadata") } finally { resultSet.close }
最后嵌套try-catch块,看起来很脏
try { val resultSet = sql(sql).resultSet try { return ColumnInfo(resultSet.getMetaData) } catch { case e => throw new ColumnInfoException("Error getting Metadata") } finally { resultSet.close } } catch { case e => throw new ColumnInfoException("Error opening resultSet") }
是否有一些更好的方法可以避免使用变量和嵌套try-catch块?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。