Tôi đang cố gắng để tránh biến mutables, nhưng vấn đề là tôi phải truy cập một val mà tôi cần phải khởi tạo bên trong thử (đó là một hoạt động db mà migth fail) và tôi cần điều đó var trong khối finallyscala: làm thế nào để tránh mutables bên trong cố gắng bắt khối
tôi đã cố gắng với một số lựa chọn thay thế:
tuyên bố val bên trong khối try
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
tuyên bố val ngoài khối try mà không cần khởi tạo nó
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
sử dụng một var, mà dường như làm việc
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
}
và cuối cùng làm tổ khối try-catch, mà dường như khá bẩn
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")
}
Có một số cách tiếp cận tốt hơn tôi có thể làm để tránh sử dụng các vars và làm tổ các khối try-catch?
Hãy giải thích để bỏ phiếu xuống? – nilskp
bắt thứ hai cũng sẽ bắt bất kỳ ngoại lệ từ lần thử đầu tiên, phải không? (upvoted, làm cho nó cải thiện phiên bản của riêng tôi ...) – opensas
Có, nó sẽ đóng bộ kết quả, nhưng để lại đánh bắt đến khối thử bên ngoài. – nilskp