Sto cercando di trovare il modo più semplice ma corretto per estendere Java Exception
in Scala. Ad esempio, il seguente non è corretto perché new Exception(null, cause)
e new Exception(cause)
avere un comportamento differente a seconda Throwable.java
:Qual è il modo migliore per estendere correttamente un'eccezione Java in 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)
}
Perché so Throwable(cause)
imposta il messaggio di cause.toString()
, mi si avvicinò con il seguente:
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)
}
Tuttavia, questo ha ancora:
if ((message eq null) && (cause ne null)) cause.toString
che è stato duplicato da Throwable.java
.
Esiste un modo migliore per estendere uno Exception
senza la duplicazione del codice?
Solleverà un 'NullPointerException' se' causa' è 'null'. – trustin
@trustin Fair point. Ho modificato la mia risposta con un modo per affrontarlo. – Shadowlands