Mic*_*mer 9 warnings scala exception try-catch catch-all
我在文件中有以下虚拟Scala代码test.scala:
class Transaction {
def begin() {}
def commit() {}
def rollback() {}
}
object Test extends Application {
def doSomething() {}
val t = new Transaction()
t.begin()
try {
doSomething()
t.commit()
} catch {
case _ => t.rollback()
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在Scala 2.8 RC1上编译它,scalac -Xstrict-warnings test.scala我将收到以下警告:
test.scala:16: warning: catch clause swallows everything: not advised.
case _ => t.rollback()
^
one warning found
Run Code Online (Sandbox Code Playgroud)
所以,如果不建议使用catch-all表达式,那么我应该如何实现这样的模式呢?除此之外,为什么无论如何都不建议这样的表达?
警告存在是因为您可能不想捕获所有内容.例如,尝试捕捉任何东西通常是不可取的,java.lang.Error因为通常很难从这些东西中恢复过来.(如果你有另一个例外,你很可能被抛出你的拦截块.)
此外,因为您无法有效地捕获所有内容,所以这不是实现原子/故障安全事务的安全方法.你最好用类似的东西
try {
t.commit()
} finally {
if (!t.checkCommitted()) {
t.rollback()
if (!t.checkRolledback()) throw new FUBARed(t)
}
}
Run Code Online (Sandbox Code Playgroud)
在阅读新内容时进行额外测试t以确保其处于合理状态.
| 归档时间: |
|
| 查看次数: |
4238 次 |
| 最近记录: |