2013-06-21 3 views
0

Я пытаюсь расширить класс Java Exception, но результат довольно уродливый и неуклюжий. Итак, я не уверен, что я на правильном пути. Любой лучший способ сделать это?Scala: подкласс класса Java с несколькими конструкторами?

class ParentError(_d: Double, msg: String, cause: Throwable) 
     extends Exception(msg: String, cause: Throwable) { 
    def this() = this(0, null, null) 
    def this(d: Double) = this(d, null, null) 
    def this(msg: String) = this(0, msg, null) 
    def this(msg: String, cause: Throwable) = this(0, msg, cause) 
    def this(cause: Throwable) = this(0, null, cause) 
    def i = _d 
} 

case class ChildError(_b: Boolean, _i: Double, msg: String, cause: Throwable) 
     extends ParentError(_i: Double, msg: String, cause: Throwable) { 
    def this(b: Boolean) = this(b, 0, null, null) 
    def this(msg: String) = this(false, 0, msg, null) 
    def this(msg: String, cause: Throwable) = this(false, 0, msg, cause) 
    def this(cause: Throwable) = this(false, 0, null, cause) 
    def b = _b 
} 

Примечание: Я видел In Scala, how can I subclass a Java class with multiple constructors?, но я не думаю, что это то, что я ищу. Благодарности

+2

возможно дубликат [определять свои собственные исключения с перегруженными конструкторами в Скале] (http://stackoverflow.com/questions/10925268/define-your-own -exceptions-with-overloaded-constructors-in-scala) – senia

ответ

4

Использовать значения по умолчанию, например:

class ParentError(i: Double = 0, msg: String = null, cause: Throwable = null) 
     extends Exception(msg: String, cause: Throwable) { 
     ⋮ 
} 
+0

Если я хочу сделать новый ParentError («Ошибка!»), мне все равно нужно определить это (msg: String) = this (0, msg, null) в любом случае, вправо ? – pt2121

+0

Если порядок args отличается, вы можете использовать именованные args: 'ParentError (msg =" Error! ")'. Таким образом, я буду 0, msg будет «Ошибка!». и причина будет нулевой. –

+0

Я вижу. понял, спасибо! – pt2121