假设我有一个带有多个构造函数的Java类:
class Base {
Base(int arg1) {...};
Base(String arg2) {...};
Base(double arg3) {...};
}
Run Code Online (Sandbox Code Playgroud)
如何在Scala中扩展它并仍然提供对Base的所有三个构造函数的访问?在Scala中,子类只能调用其中一个超类的构造函数.我该如何解决这条规则?
假设Java类是我无法更改的遗留代码.
可能重复:
使用scala中的重载构造函数定义自己的异常
我想编写一个Scala异常类,它对Java Exception类进行子类化,并提供类似的构造函数(每个构造函数都会调用相应的Exception ctor.即,我将如何编写此Java类的Scala等价物:
public class MyException extends java.lang.Exception {
public MyException () {
}
public MyException (String msg) {
super(msg);
}
public MyException (Throwable e) {
super(e);
}
public MyException (String msg, Throwable cause) {
super(msg, cause);
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎与这个问题有关,但其中的答案并不令人满意(因为实际上没有定义子类).
我正在尝试扩展 Java Exception 类,但结果非常丑陋和笨拙。所以,我不确定我是否在正确的轨道上。有没有更好的方法来做到这一点?
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) = …Run Code Online (Sandbox Code Playgroud)