我想返回一个属性的只读Set / Collection。 Kotlin最好的惯用方式是什么?
在Java中,我们可以使用Collections.unmodifiableSet()
val property: MutableSet<String> = mutableSetOf()
get() {
// ?
}
答案 0 :(得分:1)
如果要在类的实现中对集合进行变异,除了拥有两个具有不同类型的单独属性外,别无他法。
private val mutableProperty: MutableSet<String> = mutableSetOf()
val property: Set<String>
get() = mutableProperty
使用这种方法,您的界面将集合公开为只读类型,但是无论如何,显式强制转换(或Java的用法)都将允许对集合进行突变。如果要确保该集合不从外部进行突变,则可以将其包装为不可修改的集合:
val property: Set<String>
get() = Collections.unmodifiableSet(mutableProperty)
(可选)制作一个防御性副本,以使调用方不会看到对可变集的更改,也不会使用任何有效的第三方不可变集合实现。