2
私は非常に単純明快なものを書くのが難しいですが、私は正しい構文を得ることができません。Scalaのクラス型パラメータ。
私は食品のクラス階層があります。
Food :> Vegetable :> Bamboo
や動物用:
Animal :> Herbivore :> Panda
そしてパンダが食べることができないように私は、動物で食べる方法を定義しようとしているが一般的な野菜、竹のみ。現時点では、私のコードは次のようになります。
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")
私の悩みは、私は野菜を作成するときに、パンダがそれを食べることができることを、次のとおりです。
(new Panda) eat (new Vegetable("potato"))
だから、何かが間違って起こっている:(
すべてのヘルプは、変更する必要が
にpanda.eatを修正する多くの感謝:)(ポテト)問題を使用しないことにより、型情報を投げています。今、私は問題を持っています(新しいHerbivore( "牛"))食べる(新しい竹)はコンパイルされません:(----申し訳ありません、私はそれを牛と呼ぶべきではない、新しいHerbivore私はまた、「Animal」と「Herbivore」が非抽象クラスであるとは考えていないと思います(「一般草食動物」) – ehrt1974
@ ehrt1974 '新しいHerbivore [野菜]("ジェネリックherbivore ")eat(new Bamboo)' – nmat
。 –