Kotlin泛型类中的限制
我有: 现在我尝试使用协方差Kotlin泛型类中的限制,kotlin,covariance,Kotlin,Covariance,我有: 现在我尝试使用协方差 open class Fruit open class Apple : Fruit() class SmallApple : Apple() class水果盒(水果:T) 所以在我看来,有了“出局”,我应该可以 class FruitBox<out T>(fruit: T) val apple2=水果盒(Apple()) val apple3=FruitBox(Fruit())-未编译,-为什么? 但是我不能把水果放在这个盒子里,为什么?协方差适
open class Fruit
open class Apple : Fruit()
class SmallApple : Apple()
class水果盒(水果:T)
所以在我看来,有了“出局”,我应该可以
class FruitBox<out T>(fruit: T)
val apple2=水果盒(Apple())
val apple3=FruitBox(Fruit())-未编译,-为什么?
但是我不能把水果放在这个盒子里,为什么?协方差适用于类和超类。。
怎么了
如何仅对Apple和super类使用out/in for FruitBox?因为
FruitBox
的构造函数参数必须具有类型T
,因此特别是对于FruitBox
它必须具有类型Apple
<代码>水果()没有此类型
out
在这里并不重要;这意味着水果盒
是水果盒
的一个子类型,因此您可以
val apple2 = FruitBox<Apple>(Apple())
val apple3 = FruitBox<Apple>(Fruit()) - not compile, - why ?
如果..
具有类型水果盒
、水果盒
或水果盒
(如果从水果盒
中删除out
),它将编译。问题是这个值没有什么用处
如果您的意思是所有的水果盒
应该只包含苹果
和上层阶级:
val apple5: FruitBox<in Apple> = ...
这仍然有效。它只是被分别推断为水果盒
和水果盒
我想它应该是
类水果盒(fruit:T)
也不起作用。约束底部类型的用例是什么?但我只想要苹果和上层阶级的水果盒(在本例中为-fruit),那么如何在这里使用out/in?kotlin如何不支持?来自官方文档:“数组对应于Java的ArrayNot支持类/接口和方法定义,仅在使用上。您没有与类水果盒
等效的数组。显然Java也不允许,但Scala允许。
val apple5: FruitBox<in Apple> = ...
val apple6 = FruitBox(SmallApple())
val apple7 = FruitBox("")