比方说,我们有一个类有“名”属性:简单的斯卡拉的getter/setter覆盖
class SuperFoo(var name: String)
如果我想重写这一点,例如周围添加调用一些锁定:
class SubFoo(n: String) extends SuperFoo(n) {
val lock = new ReentrantLock
override def name(): String =
{
lock.lock
try {
super.name
} finally {
lock.unlock
}
}
override def name_=(arg: String): Unit = {
lock.lock
try {
super.name = arg
} finally {
lock.unlock
}
}
}
上述
将产生编译错误:
super may be not be used on variable name
任何想法如何正确地实现这一点? (即,重写getter & setter以在它们周围添加锁定)。谢谢!
编译器似乎认为我重写了一个变量:如果我从getter中删除了super.name语句,我收到了以下错误消息:“重写类型为String的类SuperFoo中的变量名称;方法名称不能覆盖变量” – Nikolaos