I'm trying to find the simplest yet proper way to extend a Java Exception
in Scala. For example, the following is not correct because new Exception(null, cause)
and new Exception(cause)
have different behavior according to 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)
}
Because I know Throwable(cause)
sets the message to cause.toString()
, I came up with the following:
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)
}
However, this still has:
if ((message eq null) && (cause ne null)) cause.toString
which was duplicated from Throwable.java
.
Is there a better way to extend an Exception
without any code duplication?