包装所有抛出的异常
Wrap all exceptions thrown
我正在设计一个特征。
trait Storage{
def write(data: Array[Byte]): Unit
}
class StorageWriteException(t: Throwable) extends RuntimeException(t)
如何使 trait Storage
的任何实现抛出的所有 NonFatal
异常被包装到 StorageWriteException
中?
是否可以在所有实现中不手动包装它?
您可以将您的特质定义为
trait Storage {
final def write(data: Array[Byte]): Unit =
try writeImpl(data) catch {
case NonFatal(e) => throw new StorageWriteException(e)
}
protected def writeImpl(data: Array[Byte]): Unit
}
然后在实现中覆盖 writeImpl
而不是 write
。这是 Template Method 设计模式
的一个例子
我正在设计一个特征。
trait Storage{
def write(data: Array[Byte]): Unit
}
class StorageWriteException(t: Throwable) extends RuntimeException(t)
如何使 trait Storage
的任何实现抛出的所有 NonFatal
异常被包装到 StorageWriteException
中?
是否可以在所有实现中不手动包装它?
您可以将您的特质定义为
trait Storage {
final def write(data: Array[Byte]): Unit =
try writeImpl(data) catch {
case NonFatal(e) => throw new StorageWriteException(e)
}
protected def writeImpl(data: Array[Byte]): Unit
}
然后在实现中覆盖 writeImpl
而不是 write
。这是 Template Method 设计模式