我在如何设计一个复杂的班级时问了一个问题,该班级包含一些班级以便将来在Kotlin中轻松扩展?关于如何设计一个复杂的类,其中包括一些类,以便将来在Kotlin中轻松扩展。
名为s1m0nw1的专家为我提供了一个很好的答案,如下代码。
但我不知道他为什么要换MutableList
到List
在https://stackoverflow.com/posts/47960036/revisions,我能得到正确的结果,当我使用MutableList。你能不能告诉我?
编码
interface DeviceDef
data class BluetoothDef(val Status: Boolean = false) : DeviceDef
data class WiFiDef(val Name: String, val Status: Boolean = false) : DeviceDef
data class ScreenDef(val Name: String, val size: Long) : DeviceDef
class MDetail(val _id: Long, val devices: List<DeviceDef>) {
inline fun <reified T> getDevice(): T {
return devices.filterIsInstance(T::class.java).first()
}
}
添加
我认为这mutableListOf<DeviceDef>
比ListOf<DeviceDef>
为了将来扩展更好。
aMutableList.add()
当我附加的新元素时,可以使用函数进行扩展mutableListOf<DeviceDef>
。
如果使用ListOf<DeviceDef>
,则必须使用构建它listOf(mBluetoothDef1, mWiFiDef1, //mOther)
,这不是很好。对?
var aMutableList= mutableListOf<DeviceDef>()
var mBluetoothDef1= BluetoothDef(true)
var mWiFiDef1= WiFiHelper(this).getWiFiDefFromSystem()
aMutableList.add(mBluetoothDef1)
aMutableList.add(mWiFiDef1)
// aMutableList.add(mOther) //This is extension
var aMDetail1= MDetail(myID, aMutableList)
抱歉,没有首先给出解释。差异在docs中进行了解释:
与许多语言不同,Kotlin区分可变集合和不可变集合(列表,集合,地图等)。精确控制可编辑集合的确切时间,对于消除错误和设计良好的API很有用。
预先了解可变集合的只读视图与实际不变的集合之间的区别非常重要。两者都很容易创建,但是类型系统不能表达差异,因此(如果相关)跟踪它取决于您。
Kotlin
List<out T>
类型是一个提供只读操作(如大小,获取等)的接口。像Java中一样,它继承自,而继承Collection<T>
又继承自Iterable<T>
。MutableList<T>
界面会添加更改列表的方法。[...]
该List
界面提供了只读视图,因此您不能例如在列表中添加新元素,例如,在多线程环境中,它具有许多优点。在某些情况下,您将使用它MutableList
来代替。
我还建议以下讨论:Kotlin和不可变集合?
编辑(添加的内容):
您可以单行执行此操作,而无需任何add
调用:
val list = listOf(mBluetoothDef1, mWiFiDef1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句