说我有这样的代码:
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]) {
...
}
但这对我正在做的事情来说真的没必要。
有更好的方法吗?
答案 0 :(得分:3)
class Caretaker(val pet: Animal[_]) {
...
}
答案 1 :(得分:0)
请注意,如果您希望看护人照顾两只可以互相交配的宠物,那么参数就会变得很重要
class Caretaker[T <: Animal[T]](val pet1: T, val pet2: Animal[T]) {
matePets = pet2.mateWith(pet1)
}