我需要初始化一組val,初始化它們的代碼可能會拋出異常。我很想寫:初始化可能拋出異常的值
try {
val x = ... generate x value ...
val y = ... generate y value ...
} catch { ... exception handling ... }
... use x and y ...
但是這(顯然)不起作用,因爲x和y不在try的範圍之外。
這很容易通過使用可變變量來解決這個問題:
var x: Whatever = _
var y: Whatever = _
try {
x = ... generate x value ...
y = ... generate y value ...
} catch { ... exception handling ... }
... use x and y ...
但是,這不完全是很不錯的。
它也很容易通過複製異常處理來解決這個問題:
val x = try { ... generate x value ... } catch { ... exception handling ... }
val y = try { ... generate y value ... } catch { ... exception handling ... }
... use x and y ...
但是,這涉及到複製的異常處理。
必須有一個「很好」的方式,但它躲過我。
也許你利用延遲vals在下一次訪問時重新計算它們的值的事實,如果在初始化過程中引發異常? – soc