在 Kotlin 中声明多种类型的列表

新手上路,请多包涵

我试图有一个包含多种类型的可变列表,说我的数据类型和字符串。我有我的数据类 MyObject

 data class MyObject(val date: Date?, val description: String?)

所以我期待类似下面的列表:

 var myList = mutableListOf<MyObject, String>()

有什么办法可以在 Kotlin 中存档吗?

原文由 Ti3t 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 545
2 个回答

您可以创建一个列表,将两种类型的第一个公共超类型作为其类型参数,在本例中为 Any

 val myList = mutableListOf<Any>()
myList.add("string")
myList.add(MyObject(null, null))

当然这样你会“丢失”列表中项目的类型,每次你得到一个列表项目你只会通过类型 Any 知道它:

 val item: Any = myList.get(0)

此时您可以进行类型检查以查看项目的类型:

 if (item is MyObject) {
    println(item.description)
}

原文由 zsmb13 发布,翻译遵循 CC BY-SA 4.0 许可协议

在这种类型已知且仅限于两个元素的特定情况下,我会使用 Pair:

 var myList = mutableListOf<Pair<MyObject,String>>()

完整代码片段如下:

 import java.util.Date

data class MyObject(val date: Date?, val description: String?)

var myList = mutableListOf<Pair<MyObject,String>>()

   fun main(args: Array<String>) {
   val first = MyObject(Date(), "time1")
   val second = "info1"
   myList.add(Pair(first, second))
   println(myList[0])
}

原文由 Krishnamoorthy Karthikeyan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题