在 Kotlin 中,这个 get() 做了什么

Exo*_*Kid -1 kotlin

我是 Kotlin 的新手,想知道它有get() = login_email.txt.toString()什么作用?

它设置email字符串吗?

在此处输入图片说明

Zoe*_*Zoe 8

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)