Scala中的AOP风格混合成分
我正在尝试使用mixin来获得类似AOP/拦截器的编程风格 这是我的密码:Scala中的AOP风格混合成分,scala,aop,mixins,Scala,Aop,Mixins,我正在尝试使用mixin来获得类似AOP/拦截器的编程风格 这是我的密码: trait X { def run } trait Y extends X { abstract override def run = { println("hi") super.run } } object Z extends X with Y { def run = println("bye") } 我在尝试编译时遇到以下错误: 方法运行需要“重写”修饰符 我做错了什么?我试图添
trait X {
def run
}
trait Y extends X {
abstract override def run = {
println("hi")
super.run
}
}
object Z extends X with Y {
def run = println("bye")
}
我在尝试编译时遇到以下错误:
方法运行需要“重写”修饰符
我做错了什么?我试图添加“覆盖”修饰符,但它给了我:
方法运行需要“抽象重写”修饰符
一种方法是在类
a
中定义基本功能,扩展基本X
,并提供混合a
和Y
的对象(或类)(以及您可以定义的所有其他特征):
Z.run
将打印
hi
bye
您应该创建基本抽象类:
abstract class A {
def run
}
然后用X或Y扩展它:
trait X extends A /* OR trait Y extends A */ {
def run
}
trait Y /*extends A*/ extends X {
abstract override def run = {
println("hi")
super.run
}
}
然后将Z.run
移动到超级类:
class S extends A {
def run = println("bye")
}
object Z extends S with X with Y {
//override def run = println("bye")
}
Z.run
// hi
// bye
我认为@Kolmar的解决方案可以得到相同的结果,但特征/类别更少。尽管如此,谢谢你。:)
class S extends A {
def run = println("bye")
}
object Z extends S with X with Y {
//override def run = println("bye")
}
Z.run
// hi
// bye