假设我有这样的代码:
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 需要参数化。我可以通过参数化看守来解决这个问题:
class Caretaker[T <: Animal[T]](val pet: Animal[T]) {
...
}
但这对于我正在做的事情来说真的是不必要的。
有一个更好的方法吗?