get()和set(value)一个后场是指自定义吸气剂和/或设定器的声明。这是使用默认值的基本示例:
class Demo{
var something: String
get() = field
set(value) {
field = value;
}
constructor(something: String){
this.something = something;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这两个是多余的。除非你用它做一些定制的事情,否则你实际上并不需要它们。它们是为 vars 自动添加的,尽管这只适用于vals 的getter (因为它们无法更改,它们没有 setter)。
你问的那一行是一个自定义的吸气剂。
get() // declares a custom getter
= // if you don't know how this works, see my explanation below
login_email.text.toString() // you should be familiar with this part already; gets the string value of the field
Run Code Online (Sandbox Code Playgroud)
如果您不熟悉语法,这相当于没有=:
get(){
return login_email.text.toString()
}
Run Code Online (Sandbox Code Playgroud)
如果您只有一个 return,则可以将括号和 return 关键字替换为=. 如果它可以帮助您记住,请记住使用的替代方法=(正文 +return关键字)
TL; DR:它声明了一个返回 TextView/EditText 值的自定义设置器(不确定它是哪个,你没有在问题中包含它)
在您的情况下,您使用自定义 getter 或 setter 来处理属性数据。字段本身实际上不包含任何数据,但您有不同对象的 getter。
以此为例:
class Demo(private val someObject: MyCustomObjectWithSomeData){
val text: String
get() = someObject.text
... same for other stuff. Could also have setters, if the properties are mutable
}
Run Code Online (Sandbox Code Playgroud)
这里的对象是私有的,但它可以是公共的或内部的。
Kotlin 支持很多自定义 getter。例如,您可以声明一个字段来显示私有变量的特定字段。例如,就您而言,您有电子邮件。它不需要是变量,因为您有一个自定义 getter,并且该字段未初始化。如果更改var email为 a val,则可以将其设为非空:
val email: String
get() = login_email.text.toString()
Run Code Online (Sandbox Code Playgroud)
这也有助于零安全。
而对于该error领域,则稍微复杂一些。它不能是val因为你声明了一个自定义的 setter,但是如果你添加了一个 getter,你可以让它非空:
var error: String
get() = login_error.text.toString()
set(value){
login_error.text = value;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1520 次 |
| 最近记录: |