如何创建 Any 类型的列表列表?

时间:2021-04-06 18:22:58

标签: kotlin

我有一堆不同类型的列表:

            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”类型。如何强制右侧输入“任何”? ?

谢谢,

4 个答案:

答案 0 :(得分:2)

你不能,因为 DoubleInt 不是同一个类型,它们有相同的根 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()
)
相关问题