假设我有一个带有多个构造函数的 Java 类:
class Base {
Base(int arg1) {...};
Base(String arg2) {...};
Base(double arg3) {...};
}
如何在 Scala 中扩展它并仍然提供对 Base 的所有三个构造函数的访问?在 Scala 中,子类只能调用其超类的构造函数之一。我该如何解决这个规则?
假设 Java 类是我无法更改的遗留代码。
人们很容易忘记特征可以扩展类。如果您使用特征,您可以推迟决定调用哪个构造函数,如下所示:
trait Extended extends Base {
...
}
object Extended {
def apply(arg1: Int) = new Base(arg1) with Extended
def apply(arg2: String) = new Base(arg2) with Extended
def apply(arg3: Double) = new Base(arg3) with Extended
}
Scala 2 特征本身可能没有构造函数参数,但您可以通过使用抽象成员来解决这个问题。
(Scala 3 允许特征具有构造函数参数。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)