Lassen Sie uns sagen, dass wir eine Klasse mit einer Eigenschaft ‚Name‘ haben:Einfache Scala Getter/Setter Überschreibung
class SuperFoo(var name: String)
Wenn ich möchte dies außer Kraft zu setzen, um zB eine Verriegelung um die Anrufe hinzufügen:
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
}
}
}
Das erzeugt über einen Übersetzungsfehler:
super may be not be used on variable name
Irgendwelche Ideen, wie man das richtig umzusetzen? (d. h., überschreiben Sie den Getter & Setter, um eine Sperre um sie hinzuzufügen). Vielen Dank!
der Compiler scheint, ich bin überschreibt eine Variable zu denken: wenn ich die super.name Anweisung aus dem Getter entfernen, erhalte ich diese Fehlermeldung: „zwingende Variablennamen in der Klasse SuperFoo vom Typ String; Methodenname nicht wandelbar außer Kraft setzen kann“ – Nikolaos