Ключевое слово set
Ключевое слово set
используется для объявления сеттера свойства.
Сеттер - это специальный метод, который вызывается автоматически
при каждой попытке установить новое значение свойству.
Он позволяет контролировать процесс присваивания значения,
добавлять валидацию или выполнять дополнительные действия.
Синтаксис
var <propertyName>: <PropertyType> = <initialValue>
set(value) {
// логика сеттера
field = value // присваивание значения
}
var <propertyName>: <PropertyType>
get() = // возвращаемое значение
set(value) {
// логика сеттера
field = value
}
Пример
Создадим свойство с сеттером, который проверяет, что устанавливаемое значение не отрицательное:
var age: Int = 0
set(value) {
if (value >= 0) {
field = value
} else {
println("Error: Age cannot be negative")
}
}
Проверим работу сеттера:
val person = Person()
person.age = 25
println(person.age)
person.age = -5
println(person.age)
Результат выполнения кода:
25
Error: Age cannot be negative
25
Пример
Сеттер с модификатором доступа:
var name: String = ""
private set
Проверим работу:
val obj = TestClass()
obj.name = "John" // Ошибка компиляции: setter is private
println(obj.name)
Результат выполнения кода:
Compilation error: Cannot assign to 'name': the setter is private
Пример
Сеттер с дополнительной логикой:
var price: Double = 0.0
set(value) {
field = if (value > 1000) value * 0.9 else value
println("Price set to: $field")
}
Проверим работу:
val product = Product()
product.price = 500.0
product.price = 2000.0
println("Final price: ${product.price}")
Результат выполнения кода:
Price set to: 500.0
Price set to: 1800.0
Final price: 1800.0
Пример
Использование параметра сеттера:
var description: String = ""
set(newDescription) {
field = newDescription.trim().uppercase()
}
Проверим работу:
val item = Item()
item.description = " hello world "
println("'${item.description}'")
Результат выполнения кода:
'HELLO WORLD'