JWT*_*JWT 5 collections kotlin
我是Kotlin的新手,我正在努力解决返回内部可变列表的不可变版本的问题.
我查看了以下' Kotlin:通过演员修改(不可变)列表,这是合法的吗?'并且理解不可变列表实际上只是只读视图,它们不公开修改方法.
我希望有一个暴露"不可变"列表的类,并且仍然希望利用Kotlins自动获取器(无需提供获取列表或列表成员的所有样板)
以下是一个坏主意(或将导致可能在将来的版本中阻止的问题)
class Foo {
val names: List<String> = LinkedList;
fun addName(name: String) {
(names as LinkedList).add(name)
}
}
Run Code Online (Sandbox Code Playgroud)
我希望允许(例如):
val foo = Foo;
println(foo.names.size)
Run Code Online (Sandbox Code Playgroud)
但仍然阻止调用者修改类的内部(至少尽可能多).例如,删除元素或清除支持列表.
以下作品:
class Foo {
private val _names: MutableList<String> = mutableListOf()
val names: List<String>
get() = _names.toList()
fun addName(name: String) {
_names.add(name)
}
}
Run Code Online (Sandbox Code Playgroud)
toList意味着如果他们将它转换为a MutableList<String>并尝试添加到它,他们将得到一个UnsupportedOperationException,该_names字段保存真实数据,外部访问通过names属性完成
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |