我有一堆不同类型的列表:
var downloadSpeedMbpsList = mutableListOf<Double>()
var uploadSpeedMbpsList = mutableListOf<Double>()
var pingMsList = mutableListOf<Double>()
var jitterMsList = mutableListOf<Double>()
var rsrpList = mutableListOf<Double>()//create lists with rsrp, rsrq, level, and later, time. Add then into the value for a higher order list as a value pair
var rsrqList = mutableListOf<Double>()
var levelList = mutableListOf<Int>()
var isRegisteredList = mutableListOf<Int>()
var earfcnList = mutableListOf<Int>()
var cellIDList = mutableListOf<Int>()
现在我想将它们添加到我的列表中。但我希望列表的类型为 any;也就是说,我仍然可以写入的不同类型的列表:
val listOfLists : MutableList<MutableList<Any?>> = mutableListOf(downloadSpeedMbpsList, uploadSpeedMbpsList, pingMsList, jitterMsList, rsrpList,rsrqList,levelList, isRegisteredList, earfcnList, cellIDList)
然而,上面的代码给了我类型不匹配。它说右侧是“out Any”类型。如何强制右侧输入“任何”? ?
谢谢,
答案 0 :(得分:2)
你不能,因为 Double
和 Int
不是同一个类型,它们有相同的根 Number
,或者你也可以使用 Any
这不太具体,但这并不能让基于不同类型的不同列表最终具有相同的类型。
您需要的是 out
关键字来表达层次结构。
val listOfLists : MutableList<MutableList<out Number?>>
工作正常
val listOfLists : MutableList<MutableList<out Any?>>
也可以
更多信息:
答案 1 :(得分:0)
plusElement 函数可以解决问题:
val listOfLists = mutableListOf<MutableList<Any?>>()
.plusElement(downloadSpeedMbpsList)
.plusElement(uploadSpeedMbpsList)
...
答案 2 :(得分:0)
val listOfLists: MutableList<MutableList<*>> = mutableListOf(
downloadSpeedMbpsList,
uploadSpeedMbpsList,
pingMsList,
jitterMsList,
rsrpList,
rsrqList,
levelList,
isRegisteredList,
earfcnList,
cellIDList
)
https://kotlinlang.org/docs/generics.html#star-projections
另外 - 我对 Any 的评论可能是错误的,但你不能这样做吗?
var downloadSpeedMbpsList = mutableListOf<Double>()
var uploadSpeedMbpsList = mutableListOf<Int>()
val listOfLists : MutableList<MutableList<out Any?>> = mutableListOf(
downloadSpeedMbpsList,
uploadSpeedMbpsList,
)
var list = listOfLists[0].toMutableList()
list.add(1.0)
listOfLists[0] = list
print(listOfLists)
答案 3 :(得分:0)
你不需要 val listOfLists : MutableList
但是
val listOfLists: MutableList<Any> = mutableListOf(
downloadSpeedMbpsList,
uploadSpeedMbpsList,
pingMsList,
jitterMsList,
rsrpList,
rsrqList,
levelList,
isRegisteredList,
earfcnList,
cellIDList)
<块引用>
OR 创建数据类
class Test() {
var downloadSpeedMbpsList = mutableListOf<Double>()
var uploadSpeedMbpsList = mutableListOf<Double>()
var pingMsList = mutableListOf<Double>()
var jitterMsList = mutableListOf<Double>()
var rsrpList = mutableListOf<Double>()//create lists with rsrp, rsrq, level, and later, time. Add then into the value for a higher order list as a value pair
var rsrqList = mutableListOf<Double>()
var levelList = mutableListOf<Int>()
var isRegisteredList = mutableListOf<Int>()
var earfcnList = mutableListOf<Int>()
var cellIDList = mutableListOf<Int>()
val dataList = DataList(
downloadSpeedMbpsList,
uploadSpeedMbpsList,
pingMsList,
jitterMsList,
rsrpList,
rsrqList,
levelList,
isRegisteredList,
earfcnList,
cellIDList)
}
data class DataList(
var downloadSpeedMbps : MutableList<Double> = mutableListOf(),
var uploadSpeedMbps : MutableList<Double> = mutableListOf(),
var pingMs : MutableList<Double> = mutableListOf(),
var jitterMs : MutableList<Double> = mutableListOf(),
var rsrp : MutableList<Double> = mutableListOf(),
var rsrq : MutableList<Double> = mutableListOf(),
var level : MutableList<Int> = mutableListOf(),
var isRegistered : MutableList<Int> = mutableListOf(),
var earfcn : MutableList<Int> = mutableListOf(),
var cellID : MutableList<Int> = mutableListOf()
)