私がこのようなコードを持っているとしましょう:
abstract class Animal[T <: Animal[T]] {
def mateWith(that: T)
}
class Cow extends Animal[Cow] {
override def mateWith(that: Cow) { println("cow") }
}
class Dog extends Animal[Dog] {
override def mateWith(that: Dog) { println("dog") }
}
私はこのようなものを書きたいです:
class Caretaker (val pet: Animal) {
...
}
ただし、Animalをパラメーター化する必要があるため、これは無効です。Caretakerをパラメータ化することでこれを解決できます。
class Caretaker[T <: Animal[T]](val pet: Animal[T]) {
...
}
しかし、これは私がしていることには本当に不要です。
これを行うためのより良い方法はありますか?