【发布时间】:2011-11-26 20:58:58
【问题描述】:
我正在尝试在 Scala 中实现可堆叠的特征模式(类似于 http://www.artima.com/scalazine/articles/stackable_trait_pattern.html)。这是我的尝试。我开始定义一个简单的类:
class Topping(var name:String)
该类声明应自动为名为“name”的变量创建 getter 和 setter 方法。所以我创建了一个扩展这个类的特征:
trait LoggingNameTrait extends Topping {
override def name_=(aName:String) {
print(aName)
super.name_=(aName) // this line doesn't compile
}
}
如果上面的代码有效,它应该覆盖“name”字段的隐式设置器,在控制台上打印它,然后调用使用该特征的类的设置器。我得到一个“超级不能用于变量名”。
你知道为什么 Scala 编译器不允许我覆盖隐式设置器吗?
【问题讨论】:
-
super.name_=(aName) // this line doesn't compile一个简单的super.name=aName怎么样?顺便说一下为什么name_是抽象的? -
那行不通。是的,我应该删除那里的抽象修饰符。谢谢!
标签: java scala inheritance traits