我试图避免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块?