在 Scala 中调用超类的 apply 方法
Call superclass apply method in scala
trait A {
def a
def b
def c
}
object A {
def apply = {
new A {
def a = 1
def b = 2
def c = 3
}
}
}
看到我在这里有一个特征 A 并且伴生对象的 apply 方法实现了它。
trait B extends A {
def d
}
object B {
def apply = {
new B {
def d = 4
}
}
}
特征 B 当然不会编译,因为我还必须实现 A 的 a/b/c 方法,但是有没有一种方法可以调用 A 的 apply 方法,然后只实现 B 的 d 方法?
我想覆盖 B.apply 中的 a/b/c 并调用 super.a/b/c 是一种方法,但是如果它有多层 A->B->C-> 怎么办D、我不想覆盖叶节点中所有父类的方法。
任何想法都会有所帮助,谢谢!
如果可以更改A
,我认为最合理的解决方案是给A.apply()
返回的匿名class起个名字:
object A {
class AImpl extends A {
def a = 1
def b = 2
def c = 3
}
def apply = new AImpl
}
object B {
def apply = {
new AImpl with B {
def d = 4
}
}
}
I think to override a/b/c in B.apply and just call super.a/b/c is one way
不,那行不通。如果是这样,就没有必要覆盖它们。
trait A {
def a
def b
def c
}
object A {
def apply = {
new A {
def a = 1
def b = 2
def c = 3
}
}
}
看到我在这里有一个特征 A 并且伴生对象的 apply 方法实现了它。
trait B extends A {
def d
}
object B {
def apply = {
new B {
def d = 4
}
}
}
特征 B 当然不会编译,因为我还必须实现 A 的 a/b/c 方法,但是有没有一种方法可以调用 A 的 apply 方法,然后只实现 B 的 d 方法?
我想覆盖 B.apply 中的 a/b/c 并调用 super.a/b/c 是一种方法,但是如果它有多层 A->B->C-> 怎么办D、我不想覆盖叶节点中所有父类的方法。
任何想法都会有所帮助,谢谢!
如果可以更改A
,我认为最合理的解决方案是给A.apply()
返回的匿名class起个名字:
object A {
class AImpl extends A {
def a = 1
def b = 2
def c = 3
}
def apply = new AImpl
}
object B {
def apply = {
new AImpl with B {
def d = 4
}
}
}
I think to override a/b/c in B.apply and just call super.a/b/c is one way
不,那行不通。如果是这样,就没有必要覆盖它们。