Я пытаюсь найти простейший, но правильный способ расширения Java Exception
в Scala. Например, следующее не правильно, потому что new Exception(null, cause)
и new Exception(cause)
имеют различное поведение в соответствии с Throwable.java
:Каков наилучший способ расширения Java Exception в Scala?
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)
}
Потому что я знаю 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)
}
Однако это все еще имеет:
if ((message eq null) && (cause ne null)) cause.toString
, который был дублирован с Throwable.java
.
Есть ли лучший способ расширить Exception
без дублирования кода?
Он вызовет 'NullPointerException', если' причина' '' null. – trustin
@trustin Справедливая точка. Изменили мой ответ одним способом борьбы с этим. – Shadowlands