Короткий ответ: в Kotlin тип возвращаемого значения getter задается типом свойства. Нельзя объявить свойство как Int, а из get() вернуть String. Если нужен другой тип, измените тип свойства или создайте отдельное вычисляемое свойство
Так правильно:
val priceText: String
get() = "$price ₽"
Здесь свойство priceText имеет тип String, и getter возвращает String
Пример с ошибкой
val count: Int
get() = "10"
Такой код не скомпилируется, потому что count объявлен как Int, а getter возвращает строку
Исправление:
val count: Int
get() = 10
val countText: String
get() = "10"
Можно ли не писать тип
Если Kotlin может вывести тип из getter, его можно не указывать:
val title
get() = "Kotlin"
Но в публичном API лучше часто указывать тип явно. Так код проще читать, а изменение getter случайно не поменяет контракт свойства
Когда лучше сделать функцию
Если значение выглядит как действие или требует параметров, лучше использовать функцию
fun priceText(currency: String): String {
return "$price $currency"
}
Свойство хорошо подходит для значения без параметров: fullName, isAdult, priceText. Функция лучше для действия: formatPrice("USD"), loadUser(), calculateTotal(discount)
Если нужно скрыть исходный тип
Иногда внутри класса хранится одно значение, а наружу нужно отдавать другое представление. Тогда делайте private-поле и публичное вычисляемое свойство:
class Product(
private val priceCents: Int
) {
val priceRubles: Double
get() = priceCents / 100.0
}
Тип getter здесь не «меняется отдельно». Просто публичное свойство priceRubles сразу объявлено как Double, а внутреннее поле остается Int
Пример вычисляемого свойства
class User(
val firstName: String,
val lastName: String
) {
val fullName: String
get() = "$firstName $lastName"
}
fun main() {
val user = User("Анна", "Иванова")
println(user.fullName)
}
Вывод:
Анна Иванова
fullName не хранится отдельно. Оно вычисляется при обращении к getter
Частые ошибки
Ждать отдельный return type у get
В Kotlin getter не пишется как обычная функция с независимым типом. Тип принадлежит свойству
Делать тяжелую операцию в getter
Если getter ходит в сеть, читает файл или делает тяжелый расчет, читатель кода будет удивлен. Лучше сделать функцию
Использовать var без необходимости
Если значение только вычисляется и не должно задаваться извне, используйте val
Что почитать дальше по Kotlin
Если нужен общий маршрут по теме, откройте рубрику Kotlin. Для соседних задач пригодятся эти разборы:
- Coroutines в Kotlin: первый async-пример
- Inline в Kotlin: что это и когда использовать
- Kotlin Android: первый экран без перегруза
- Kotlin serialization: как настроить JSON на простом примере



