我正在尝试拥有一个包含多种类型的可变列表,我的数据类型和字符串。
我有我的数据类MyObject
data class MyObject(val date: Date?, val description: String?)
所以我希望下面列出的内容如下:
var myList = mutableListOf<MyObject, String>()
有没有办法将它归档到Kotlin?
答案 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])
}