ehr*_*974 2 scala generic-variance
我写一些应该很直接的东西很难,但我似乎无法正确理解语法.
我有食物的类层次结构:
Food :> Vegetable :> Bamboo
Run Code Online (Sandbox Code Playgroud)
而对于动物:
Animal :> Herbivore :> Panda
Run Code Online (Sandbox Code Playgroud)
而我正试图在动物中定义一种吃法,这样熊猫一般不能吃蔬菜,只能吃竹子.目前,我的代码如下所示:
class Food(val name : String)
class Vegetable(name: String) extends Food(name)
class Bamboo extends Vegetable("bamboo")
class Animal[F <: Food](val name : String) {
def eat[T <: F](f : T) = println(s"$name eats some yummy ${f.name}")
}
class Herbivore[F <: Vegetable](name :String) extends Animal[Vegetable](name)
class Panda extends Herbivore[Bamboo]("panda")
Run Code Online (Sandbox Code Playgroud)
我的麻烦是,当我制作蔬菜时,熊猫可以吃它:
(new Panda) eat (new Vegetable("potato"))
Run Code Online (Sandbox Code Playgroud)
出了点问题:(
任何帮助将非常欢迎:)
你需要改变:
class Herbivore[F <: Vegetable](name :String) extends Animal[Vegetable](name)
Run Code Online (Sandbox Code Playgroud)
至:
class Herbivore[F <: Vegetable](name :String) extends Animal[F](name)
Run Code Online (Sandbox Code Playgroud)
否则你不会使用F丢弃类型信息.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |