我有一个泛型对象:

data class MyObject<T>(
    val entity: T
)

我想用不同的类型T连接这些对象的两个列表,并返回它们.

我试过了

fun concatLists(): List<MyObject<Any>> {
val listOfAs = listOf(MyObject<A>())
val listOfBs = listOf(MyObject<B>())

return mutableListOf<MyObject<Any>>().also {
            it.addAll(listOfAs)
            it.addAll(listOfBs)
        }
}

然而,我得到了错误:

Type mismatch.
Required:
Collection<MyObject<Any>>
Found:
List<MyObject<A>>

我不明白为什么会抛出这个错误,因为我认为Collection是List的子级,而类型A是Any的子级,所以这会起作用.

推荐答案

对于您的用例,您可以使用star projection,如

fun concatLists(): List<MyObject<*>> {
    val listOfAs = listOf(MyObject(A()))
    val listOfBs = listOf(MyObject(B()))

    return mutableListOf<MyObject<*>>().also {
        it.addAll(listOfAs)
        it.addAll(listOfBs)
    }
}

另见Difference between "*" and "Any" in Kotlin generics

Kotlin相关问答推荐

如何在 Big Data 中使用Inc过滤器?

测试Compose Multiplatform UI时,为另一个文件设置ComposeRule()

Fleet无法从构建文件自动重新加载更改错误'

两个LocalDateTime之间的Kotlin差异

合并状态流

Criteria Api 中的 Kotlin 泛型

具有泛型类型的 Kotlin 密封接口不会为其子类型推断约束

如何在 jOOQ 中两次加入同一张表?

将子元素放在一个列表中

为什么我在使用 Jetpack Compose clickable-Modifier 时收到后端内部错误:Exception during IR lowering error?

如何在 Kotlin 中创建一个打开新活动(Android Studio)的按钮?

Android Studio 和 Kotlin:Unresolved reference: also

Kotlin JVM 和 Kotlin Native 有什么区别?

从片段(fragment)中的点击事件启动协同程序

Kotlin:如何从另一个类访问字段?

类型不匹配:推断类型为 LoginActivity 但应为 LifecycleOwner

Android Kotlin 创建类实现 Parcelable 在 writeToParcel 方法的 override中给出错误

如何在Kotlin中使用Handler和handleMessage?

Android Studio - java.io.IOException:无法生成 v1 签名

从另一个列表创建一个列表