2017-06-29 4 views
0
class loginViewModel(): BaseObservable() { 

    var errorEmail:String?=null 
    var errorPassword:String?=null 

    var userEmailAddress:ObservableField<String> = ObservableField() 
    var userPassword:ObservableField<String> = ObservableField() 

    fun setUserEmailAddress(email:ObservableField<String>){ 
     this.userEmailAddress=email 
     /* To get value of edittext enterd by user, This Updates the value of userEmail on Every LEtter Entered by User*/ 
     notifyPropertyChanged(R.id.email_address) 
     notifyPropertyChanged(BR.errorEmail) 
    } 

} 

aber der Fehler immerWie überschreiben Setter-Methode in Kotlin?

Platform declaration clash: The following declarations have the same JVM signature (setUserEmailAddress(Landroid/databinding/ObservableField;)V): 
    • public final fun setUserEmailAddress(email:ObservableField<String>): Unit 
    • public final fun <setUserEmailAddress>(<set-?>:ObservableField<String>): Unit 

I this solution versucht.

kotlin version = 1.1.2-4 Ich habe versucht, den Spaß auch zu überschreiben, was ich denke, wir können nicht.

+3

Mögliche Duplikat [Getter und Setter in Kotlin] (https://stackoverflow.com/questions/37906607/getters-and-setters-in-kotlin) – nayem

Antwort

3

Sie können eine custom setter für Ihr Feld deklarieren, anstatt eine neue setUserEmailAddress() Methode zu erstellen. Sie können den folgenden Code sehen.

Der Grund, warum Sie diesen Fehler erhalten, liegt daran, dass ein Setter automatisch generiert wird, wenn Sie eine Variable erstellen. Die setUserEmailAddress Funktion, die Sie erstellen, stimmt mit dem Namen überein, der einen Namespace-Konflikt verursacht.

class loginViewModel(): BaseObservable() { 
    var errorEmail:String?=null 
    var errorPassword:String?=null 

    var userPassword:ObservableField<String> = ObservableField() 
    var userEmailAddress:ObservableField<String> = ObservableField() 
     set(email){ // the type of email is inferred 
      field=email // we can access the backing field in our custom setter 

      /* To get value of edittext enterd by user, 
       This Updates the value of userEmail on 
       Every LEtter Entered by User*/ 
      notifyPropertyChanged(R.id.email_address) 
      notifyPropertyChanged(BR.errorEmail) 
     } 
} 
+0

Weitere Informationen über Träger Felder finden Sie hier [ ] (https://kotlinlang.org/docs/reference/properties.html#backing-fields) –