@korobovn

Как изменить тип возвращаемого значения для getter в Kotlin?

class Order(iitems: List<OrderItem>) {
    private val items: MutableList<OrderItem> = items.toMutableList()
}

Принять на вход неизменяемый список OrderItem, сохранить его, как изменяемый и возвращать значение как неизменяемое.
Не работает:
class Order(items: List<OrderItem>) {
    private val items: MutableList<OrderItem> = items.toMutableList()
        get():List<OrderItem> = field.toList()
}

Язык не позволяет изменить тип возвращаемого значения для геттера. С ошибкой (Getter return type must be equal to the type of the property.)
Обхожу эту проблему следующим образом:
class Order(items: List<OrderItem>) {
    private val _items: MutableList<OrderItem> = items.toMutableList()

    val items: List<OrderItem>
        get() = _items.toList()
}

Код работает, но Котлин становится многословным. Есть ли способ более элегантно реализовать задуманное? Можно через классический способ с использованием простых методов, но хочется сохранить стилистику прямого обращения к полям.
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
Нормальный код. Разве что .toList() можно убрать.

В котлине версии 1.4 можно будет использовать делегирование по свойству:
val items: List<OrderItem> by this::_items
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alekseyHunter
@alekseyHunter
Android developer
Код работает, но кажется, что при таком раскладе Котлин становится многословным.

Зачем такой велосипед? Вы можете передавать в конструктор сразу MutableList, а при вызове поля из вне, конвертить обратно в List.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы