正确扩展Scala中Java异常的最佳方法是什么?

tru*_*tin 5 scala exception

我正在尝试找到Exception在Scala中扩展Java的最简单但最合适的方法.例如,下面是不正确的,因为new Exception(null, cause)new Exception(cause)有根据不同的行为Throwable.java:

class InvalidVersionException(message: String = null, cause: Throwable = null)
  extends IllegalArgumentException(message, cause) {
  def this(message: String) = this(message, null)
  // This is not same with super(cause)
  def this(cause: Throwable) = this(null, cause)
}
Run Code Online (Sandbox Code Playgroud)

因为我知道Throwable(cause)设置消息cause.toString(),我想出了以下内容:

class InvalidVersionException(message: String = null, cause: Throwable = null)
  extends IllegalArgumentException(if ((message eq null) && (cause ne null)) cause.toString else message, cause) {
  def this(message: String) = this(message, null)
  def this(cause: Throwable) = this(null, cause)
}
Run Code Online (Sandbox Code Playgroud)

但是,这仍然有:

if ((message eq null) && (cause ne null)) cause.toString
Run Code Online (Sandbox Code Playgroud)

这是重复的Throwable.java.

有没有更好的方法来扩展Exception没有任何代码重复?

tru*_*tin 0

根据@Shadowlands的回答,我最终得到以下结果:

class InvalidVersionException(message: String, cause: Throwable = null)
  extends IllegalArgumentException(message, cause) {
  def this(cause: Throwable) = this(if (cause ne null) cause.toString else null, cause)
  def this() = this(null)
}
Run Code Online (Sandbox Code Playgroud)

..节省了 54 个字节。