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

时间:2018-06-14 06:56:00

标签: android kotlin

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

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

所以我希望下面列出的内容如下:

var myList = mutableListOf<MyObject, String>()

有没有办法将它归档到Kotlin?

3 个答案:

答案 0 :(得分:6)

您可以创建一个列表,其中包含两种类型的第一个常用超类型作为其类型参数,在本例中为Any

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

当然,这样你就会失去&#34;列表中项目的类型,每次获得列表项时,您只能按类型Any知道它:

val item: Any = myList.get(0)

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

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

答案 1 :(得分:3)

是和否,这将是任何的列表,它是每种类型的超类型,您无法创建 MyObject,String

的列表
import java.util.*

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

fun main(args: Array<String>) {
      var myObject = MyObject(null, "")
      var myList = mutableListOf(myObject, "someString")
      print(myList)
}

下面的代码是不可能的,

var myList = mutableListOf<MyObject, String>()

答案 2 :(得分:2)

在这种类型已知且仅限于两个元素的特定情况下,我将使用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])
}