get()
и set(value)
после поля означают объявление пользовательского геттера и / или сеттера.Вот базовый пример использования значений по умолчанию:
class Demo{
var something: String
get() = field
set(value) {
field = value;
}
constructor(something: String){
this.something = something;
}
}
Однако эти два являются избыточными.Они вам на самом деле не нужны, если вы не делаете с ними что-то особенное.Они автоматически добавляются для переменных, хотя это относится только к геттерам на val
с (поскольку их нельзя изменить, у них нет сеттеров).
Строка, о которой вы спрашивали, - это пользовательский получатель.
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
Если вы не знакомы с синтаксисом, это эквивалентно без =
:
get(){
return login_email.text.toString()
}
, если у вас есть один возврат, вы можете заменить скобки ивернуть ключевое слово с =
.Если это поможет вам запомнить, просто запомните альтернативу использованию =
(тело + ключевое слово return
)
TL; DR: , оно объявляет пользовательский установщик, который возвращает значениеTextView / EditText (не уверен, что это, вы не включили это в вопрос)
В вашем случае вы используете пользовательский метод получения или установки для обработки данных свойств.Сами поля на самом деле не содержат никаких данных, но у вас есть геттеры для другого объекта.
Возьмите это в качестве примера:
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
}
Здесь объект является частным, но он может быть публичным или внутренним в этом отношении.
Kotlin довольно много поддерживает спользовательские добытчики.Например, вы можете объявить поле для отображения определенных полей закрытой переменной.Например, в вашем случае у вас есть электронная почта.Это не обязательно должна быть переменная, поскольку у вас есть пользовательский метод получения, а поле не инициализировано.Если вы измените var email
на val
, вы можете сделать его ненулевым:
val email: String
get() = login_email.text.toString()
Это также помогает с нулевой безопасностью.
А для поля error
это немного сложнее.Это не может быть val
, потому что вы объявляете пользовательский установщик, но если вы добавляете геттер, вы можете сделать его ненулевым:
var error: String
get() = login_error.text.toString()
set(value){
login_error.text = value;
}