Diciamo che abbiamo una classe con un 'nome' immobile:Semplice Scala getter/esclusione setter
class SuperFoo(var name: String)
Se voglio ignorare questo, ad esempio aggiungere un po 'di blocco intorno alle chiamate:
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
}
}
}
quanto sopra genera un errore di compilazione:
super may be not be used on variable name
Delle idee come attuare correttamente questo? (Escludere il setter getter & per aggiungere il blocco intorno a loro). Grazie!
Il compilatore sembra pensare che io stia ignorando una variabile: se rimuovo l'istruzione super.name dal getter, ottengo questo messaggio di errore: "Nome variabile sovrascrivibile in classe SuperFoo di tipo String; nome del metodo non può sovrascrivere un mutabile" – Nikolaos