【发布时间】:2012-12-28 12:18:56
【问题描述】:
假设我们有一个具有“名称”属性的类:
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 类中的变量名;方法名称不能覆盖可变的"
标签: scala inheritance properties setter getter