1

假设我有这样的代码:

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]) {
  ...
}

但这对于我正在做的事情来说真的是不必要的。

有一个更好的方法吗?

4

2 回答 2

3
class Caretaker(val pet: Animal[_]) {
    ...
}
于 2012-04-19T21:37:51.850 回答
0

请注意,如果您希望看护人​​照顾两只可以相互交配的宠物,那么该参数将变得很重要

class Caretaker[T <: Animal[T]](val pet1: T, val pet2: Animal[T]) {
  matePets = pet2.mateWith(pet1)
}
于 2012-04-19T22:42:14.947 回答