在Scala中,我想创建一个抽象类,它接受一些“策略”参数(此处为myBase
)和一个值参数(此处为myVal
)。
我希望从该类继承,将strategy参数作为继承的一部分提供,并获取一个类(此处为Cls1
),该类接受该值作为构造函数参数。
以下是我希望能够运行的代码:
abstract class Base(myBase: Int)(val myVal: Int) {
val divVal: Int = myBase / myVal
}
class Cls1 extends Base(10) // myBase = 10
val obj1 = new Cls1(5) // myVal = 5
assert(obj1.divVal == 10/5)
不幸的是,我收到以下错误:
错误:构造函数Cls1的参数太多:()A $ A58.this.Cls1 lazy val obj1 = new Cls1(5) 错误:缺少类中的构造函数Base的参数列表基类Cls1扩展了Base(10)
请您解释一下如何在不重复逻辑的情况下完成此操作(此处为myBase / myVal
)?
答案 0 :(得分:3)
您可以要求myVal
成为一个抽象字段,必须由任何入级类填写:
abstract class Base(myBase: Int) {
val myVal: Int
val divVal: Int = myBase / myVal
}
class Clazz(val myVal: Int) extends Base(10)
val clz = new Clazz(5)
assert(clz.divVal == 10 / 5)