如何覆盖科特林中的 setter 方法?
How to override setter method in kotlin?
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)
}
}
但是出现错误
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
我试过了this solution。
kotlin 版本 = 1.1.2-4
我也试图超越我认为我们做不到的乐趣。
您可以为您的字段声明一个 custom setter 而不是创建一个新的 setUserEmailAddress()
方法。您可以在下面查看执行此操作的代码。
您收到此错误的原因是因为在您创建 var 时自动为您生成了一个 setter。您创建的 setUserEmailAddress
函数与其名称匹配,导致命名空间冲突。
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)
}
}
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)
}
}
但是出现错误
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
我试过了this solution。
kotlin 版本 = 1.1.2-4 我也试图超越我认为我们做不到的乐趣。
您可以为您的字段声明一个 custom setter 而不是创建一个新的 setUserEmailAddress()
方法。您可以在下面查看执行此操作的代码。
您收到此错误的原因是因为在您创建 var 时自动为您生成了一个 setter。您创建的 setUserEmailAddress
函数与其名称匹配,导致命名空间冲突。
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)
}
}