2016-09-08 4 views
3

Ich habe ein Java ein wenig wie so Datei:Benutzerdefinierte Getter für Eigenschaften von Typparametern

public class Thing { 

    private String property; 

    public Thing(String property) { 
     this.property = property; 
    } 

    public String getProperty() { 
     if (property == null) { 
      return "blah blah blah"; 
     } else { 
      return property; 
     } 
    } 

} 

Offensichtlich gibt zu meiner eigentlichen Klasse mehr ist, aber die oben ist nur ein Beispiel.

Ich möchte dies in Kotlin schreiben, also begann ich dies mit:

class Thing(val property: String?) 

Dann habe ich versucht, die benutzerdefinierte Getter mit the official documentation und another Kotlin question als Referenz zu implementieren, wie folgt aus:

class Thing(property: String?) { 

    val property: String? = property 
     get() = property ?: "blah blah blah" 

} 

Allerdings markiert meine IDE (Android Studio) die zweite property in der 3. Zeile des obigen Codes in rot und gibt mir die Nachricht:

Initializer ist hier nicht erlaubt, da die Eigenschaft keine dahinter liegende Feld hat

Warum bin ich diesen Fehler, und wie würde ich in der Lage sein, diese benutzerdefinierten Getter zu schreiben, wie oben beschrieben?

Antwort

5

Sie müssen „Feld“ statt „Eigenschaft“ in den Körper Ihres get() verwenden, um eine backing field zu erklären:

class Thing(property: String?) { 
    val property: String? = property 
     get() = field ?: "blah blah blah" 
} 

jedoch in diesem speziellen Beispiel könnten Sie mit einem nicht besser dran -null Eigenschaftsdeklaration:

class Thing(property: String?) { 
    val property: String = property ?: "blah blah blah" 
} 
+0

Danke für Ihre Antwort. Ich weiß nicht, wie ich das vergessen habe ... –

Verwandte Themen