私はScalaでJava Exception
を拡張する最も単純ではあるが適切な方法を探しています。 new Exception(null, cause)
とnew Exception(cause)
がThrowable.java
に応じて異なる動作を持っているので、たとえば、次が正しくありません:Scalaで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)
}
私はcause.toString()
にThrowable(cause)
セットメッセージを知っているので、私は、次のを思い付いた:
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
から複製されています。
コードを重複せずにException
を拡張するより良い方法はありますか?
'cause'が' null'の場合、 'NullPointerException'を送出します。 – trustin
@trustinフェアポイント。私の答えをそれを扱う一つの方法で編集しました。 – Shadowlands