有几个小问题。暂时使用bars[2]!! as Bar<Baz>
,
w: (4, 20): Unchecked cast: Foo.Bar<Any?> to Foo.Bar<Baz>
e: (5, 20): Assignment operators ambiguity:
public operator fun <T> Collection<Baz>.plus(element: Baz): List<Baz> defined in kotlin.collections
@InlineOnly public operator inline fun <T> MutableCollection<in Baz>.plusAssign(element: Baz): Unit defined in kotlin.collections
Kotlin 不知道是否将其处理为bar2.bazes = bar2.bazes.plus(baz)
或bar2.bazes.plusAssign(baz)
. 如果您将其更改为var2.bazes.add(baz)
或val bazes
歧义消失。
解决这个问题并删除不安全的演员会带来
e: (5, 20): Out-projected type 'MutableList<out Any?>' prohibits the use of 'public abstract fun add(element: E): Boolean defined in kotlin.collections.MutableList'
类型投影可以安全地完成什么的问题。它被视为out Any?
,因此您可以从列表中读取,但是in Nothing
,这意味着您不能向列表中添加任何内容。
从这个例子中不清楚你为什么使用*
. 如果它不会导致任何其他问题,也许您可以取消<Baz>
参数,例如
class Foo<Baz>(val bars: Map<Int, Bar<Baz>>)