A Backing Field ist nur ein Feld, das nur für eine Eigenschaft in einer Klasse erzeugt wird, wenn es die Standardimplementierung von mindestens einem der Accessoren
Backing Feld erzeugt wird, verwendet nur wenn eine Eigenschaft die Standardimplementierung von Getter/Setter verwendet. Wenn Sie den folgenden Code mit der Perspektive Java
sehen. Es sieht korrekt aus. In "kotlin" wird jedoch Exception ausgelöst.
class User{
var firstName : String //backing field generated
get() = firstName
set(value) {
firstName = value
}
var lastName : String //backing field generated
get() = lastName
set(value) {
lastName = value
}
val name : String //no backing field generated
get() = "{$firstName $lastName}"
var address : String = "XYZ" //^because there is no default //^implementation of an accessor
}
In Kotlin das obige Codefragment wird Stackoverflow werfen, denn wenn wir Eigenschaft zugreifen oder auf „first-name“ oder „Nachname“ der Standard-Accessor aufgerufen wird. Also in Kotlin "user.firstName =" value "" ist gleich wie Java "user.setFirstName (" value ")".
Also, wenn "set (wert) {firstName =" wert "}" dann aufgerufen wird eine rekursive CallHappens und Compiler löst eine Exception Ausnahme, weil wir Setter innerhalb der Setter aufrufen
Lösung für dieses Problem ist, Benutzer sichern Felder.In Kotlin kann ein Backing-Feld mit "Feld" Schlüsselwort innerhalb Zugriffsmethoden zugegriffen werden.Sehen Sie sich das korrigierte Code-Snippet an.
class User{
var firstName : String get() = field
set(value) {
field = value
}
var lastName : String get() = field
set(value) {
field = value}
}
}
Ich hoffe, es ist Ihnen klar. Wenn Sie mehr Hilfe benötigen, fragen Sie mich .. danke
Warum negativ am Anfang? –
Zum einen ist der Code, den Sie gepostet haben, nicht der gesamte Codebeispiel. Die Leute sollten nicht zu externen Links gehen müssen, um das vollständige Bild zu erhalten. Ja, es sieht so aus, als ob "Feld" ein spezielles Schlüsselwort ist, das Mutanten beim Setzen unterstützt. – Phix