Kotlin:暴露API中的不可变列表

我是Kotlin的新手,并且正在解决返回不可变内部可变列表版本的问题。

我回顾了下面的' Kotlin:通过转换修改(不可变的)列表,是否合法? '并理解不可变列表实际上只是只读的视图,不公开修改方法。

我想要一个暴露“不可变”列表的类,并且仍然想要利用Kotlins自动获取器(不必提供获取列表或列表成员的所有样板)

下面是一个坏主意(或者它会导致在将来的版本中可能被阻止的问题)

class Foo { val names: List<String> = LinkedList; fun addName(name: String) { (names as LinkedList).add(name) } } 

我正在寻找允许(例如):

  val foo = Foo; println(foo.names.size) 

但仍然阻止调用者修改类的内部(至少尽可能)。 例如删除元素或清除后备列表。

以下工作:

 class Foo { private val _names: MutableList<String> = mutableListOf() val names: List<String> get() = _names.toList() fun addName(name: String) { _names.add(name) } } 

toList意味着如果他们将其转换为MutableList<String>并尝试添加它,则会得到一个UnsupportedOperationException_names字段保存真实数据,并且通过names属性完成外部访问