Kotlin: возврат только для чтения Набор / Коллекция - PullRequest
1 голос
/ 01 июня 2019

Я хочу вернуть только для чтения Набор / Коллекция свойства.Какой лучший идиоматический способ в Котлине?

В Java мы можем использовать Collections.unmodifiableSet()

val property: MutableSet<String> = mutableSetOf()

    get() {
        // ?
    } 

1 Ответ

1 голос
/ 01 июня 2019

Если вы хотите изменить набор из реализации вашего класса, у вас нет другого пути, кроме как иметь два отдельных свойства с разными типами.

private val mutableProperty: MutableSet<String> = mutableSetOf()

val property: Set<String> 
    get() = mutableProperty

При таком подходе ваш интерфейс предоставляет набор как доступный только для чтения тип, но явное приведение (или использование из Java) в любом случае позволит изменить набор. Если вы хотите убедиться, что набор не мутирован извне, вы можете заключить его в неизменяемый набор:

val property: Set<String>
    get() = Collections.unmodifiableSet(mutableProperty)

При необходимости создайте защитную копию, чтобы вызывающая сторона не увидела изменения в изменяемом наборе, или воспользуйтесь какой-либо эффективной сторонней реализацией неизменяемой коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...