Kotlin:返回只读Set / Collection

时间:2019-06-01 15:25:46

标签: kotlin collections

我想返回一个属性的只读Set / Collection。 Kotlin最好的惯用方式是什么?

在Java中,我们可以使用Collections.unmodifiableSet()

val property: MutableSet<String> = mutableSetOf()

    get() {
        // ?
    } 

1 个答案:

答案 0 :(得分:1)

如果要在类的实现中对集合进行变异,除了拥有两个具有不同类型的单独属性外,别无他法。

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

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

使用这种方法,您的界面将集合公开为只读类型,但是无论如何,显式强制转换(或Java的用法)都将允许对集合进行突变。如果要确保该集合不从外部进行突变,则可以将其包装为不可修改的集合:

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

(可选)制作一个防御性副本,以使调用方不会看到对可变集的更改,也不会使用任何有效的第三方不可变集合实现。