alh*_*art 4 immutability kotlin
我已经开始使用Kotlin作为java的替代品并且非常喜欢它.但是,如果没有跳回到java-land,我一直无法找到解决方案:
我有一个Iterable<SomeObject>并且需要将其转换为列表,因此我可以多次迭代它.这是一个不可变列表的明显应用,因为我需要做的就是多次读取它.我如何在开始时将这些数据实际放入列表中?(我知道这是一个界面,但我一直无法在文档中找到它的实现)
可能的(如果不满意)解决方案:
val valueList = arrayListOf(values)
// iterate through valuelist
Run Code Online (Sandbox Code Playgroud)
要么
fun copyIterableToList(values: Iterable<SomeObject>) : List<SomeObject> {
var outList = ArrayList<SomeObject>()
for (value in values) {
outList.add(value)
}
return outList
}
Run Code Online (Sandbox Code Playgroud)
除非我误解,否则这些最终MutableLists会有效,但感觉就像是一种解决方法.是否有类似的immutableListOf(Iterable<SomeObject>)方法将实例化一个不可变的列表对象?
hot*_*key 12
在Kotlin中,List<T>是一个只读列表界面,它不具有更改内容的功能,不像MutableList<T>.
通常,List<T>实现可能是一个可变列表(例如ArrayList<T>),但如果您将其作为a传递,则List<T>不会在不进行强制转换的情况下公开变异函数.这样的列表引用称为只读,表明列表不打算更改.这是通过接口的不变性,被选择作为Kotlin stdlib的不变性的方法.
更接近这个问题,stdlib中的toList()扩展函数Iterable<T>将适合:它返回只读List<T>.
例:
val iterable: Iterable<Int> = listOf(1, 2, 3)
val list: List<Int> = iterable.toList()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1300 次 |
| 最近记录: |