Android Kotlin泛型异常
好的,我有三种接口类型Android Kotlin泛型异常,android,generics,kotlin,Android,Generics,Kotlin,好的,我有三种接口类型 移动 Animal与子接口Cat,Dog,Horse AnimalMovement 移动界面 interface Movement<T : Animal> { fun moveAnimal(type:T) } 动物运动 interface CatMovement : Movement<Cat> 问题 fun TestGenerics() { var catMovement : Movement<Cat> = Cat
移动
Animal
与子接口Cat
,Dog
,Horse
AnimalMovement
interface Movement<T : Animal> {
fun moveAnimal(type:T)
}
动物运动
interface CatMovement : Movement<Cat>
问题
fun TestGenerics() {
var catMovement : Movement<Cat> = CatMovementImpl() // this works
var catMovement : Movement<Animal> = CatMovementImpl() // this doesn't?
}
fun TestGenerics(){
var catMovement:Movement=CatMovementImpl()//这是有效的
var catMovement:Movement=CatMovementImpl()//这不是吗?
}
我相信在Java中,这两行代码都可以很好地工作。但是,在Kotlin中,第二行无法执行。为什么会这样?动物是猫的基本类型,所以这应该是正确的吗?我不是科特林的专家,但这似乎很正常: 当这样宣布时:
var animalMovement : Movement<Animal>
var animalMovement : Movement<Animal> = CatMovementImpl()
interface Movement<out T : Animal> {
fun moveAnimal(type: T) // error
}
但如果这样分配:
var animalMovement : Movement<Animal>
var animalMovement : Movement<Animal> = CatMovementImpl()
interface Movement<out T : Animal> {
fun moveAnimal(type: T) // error
}
var animalMovement:Movement=CatMovementImpl()
是允许的,这意味着你的
CatMovementImpl
应该能够移动狗?我不是Kotlin的专家,但这似乎很正常:
当这样宣布时:
var animalMovement : Movement<Animal>
var animalMovement : Movement<Animal> = CatMovementImpl()
interface Movement<out T : Animal> {
fun moveAnimal(type: T) // error
}
但如果这样分配:
var animalMovement : Movement<Animal>
var animalMovement : Movement<Animal> = CatMovementImpl()
interface Movement<out T : Animal> {
fun moveAnimal(type: T) // error
}
var animalMovement:Movement=CatMovementImpl()
是允许的,这意味着您的CatMovementImpl
应该能够移动狗?评论中所说的是正确的
我很确定这在Java中也不起作用。一个
移动
在评论中已经建议使用out
,这不是运动的子类型。评论中所说的是正确的
我很确定这在Java中也不起作用。一个移动
在注释中已经建议使用out
,这不是运动的一个子类型。我很确定这在Java中也不起作用。Movement
不是Movement的子类型。它应该是out Animal
?m0skito您似乎是对的。我很确定这在Java中也不起作用。Movement
不是Movement的子类型。是否应该是out Animal
?M0ski你似乎是对的。我可以看出我的逻辑有缺陷。这一点和m0skito在这个问题下的评论或许能提供一些启示。我正在重新审视手头的任务,我可以看出我的逻辑有何缺陷。这一点和m0skito在这个问题下的评论或许能提供一些启示。我正在重温手头的任务我只想补充一点,你不能在移动中调用moveAnimal
,这对这个界面来说尤其无用。我只想补充一点,你不能在移动中调用moveAnimal
,这对这个界面来说尤其无用。