在 Kotlin 中,我正在学习协变(可以使用子类型代替超类型)。他们在那里写了一些类似规则的东西。但这对我来说似乎是错误的。这个已经写完了:
但是,如果类具有该泛型类型的函数参数或 var 属性,则不能使用 out。
但我认为or应该替换为and,因为在类具有“获取”类型作为参数的函数的情况下,如果泛型类型的属性是val而不是var,并且损坏无法完成,因为 val 属性无法进行任何分配。我是对的还是书中写的内容是正确的,我遗漏了什么?
编辑:我刚刚意识到(根据我在这个论坛上看到的一些帖子),尽管属性被声明为 val,但参数可能成为问题的唯一情况是,如果我们有一个 T 类型的容器,那么就说 List如果我们尝试添加到List可能会出现问题,但是如果我们没有容器,我在获取参数类型时看不到情况,而属性为 val 时可能会出现问题。我对吗?