Ich versuche, Mutables Variablen zu vermeiden, aber das Problem ist, dass ich auf ein val zugreifen muss, dass ich innerhalb der versuchen muss initialisieren (es ist eine db-Operation, die fehlschlagen mig) und ich brauche, dass var in dem finally-Blockscala: wie man Mutables in try catch Blöcke zu vermeiden
ich habe versucht, mit mehreren Alternativen:
erklären die val innerhalb des try-Blockes
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
die val außerhalb des try-Blockes deklariert ohne Initialisierung es
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
eine var, die
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
}
und schließlich Verschachtelung try-catch-Block scheint zu funktionieren, die
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")
}
Gibt es einen besseren Ansatz, den ich nehmen zu vermeiden, eher schmutzig scheint Verwenden von Vars und Schachteln Try-Catch-Blöcke?
Auswerten, um die down vote zu erklären? – nilskp
der zweite Fang würde auch jede Ausnahme vom ersten Versuch fangen, oder? (upvoted, weil es meine eigene Version verbessert ...) – opensas
Ja, es wird die Ergebnismenge schließen, aber den Fang an den äußeren try Block zurücklassen. – nilskp