以任何参数对象作为参数传递给类构造函数
问题描述:
说我有这样的代码:以任何参数对象作为参数传递给类构造函数
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) {
...
}
但这是无效的,因为动物需要参数化。我可以通过参数看守解决这个问题:
class Caretaker[T <: Animal[T]](val pet: Animal[T]) {
...
}
,但是这是我在做什么真的不必要。
有没有更好的方法来做到这一点?
答
class Caretaker(val pet: Animal[_]) {
...
}
答
请注意,如果你想有一个看守照顾两只宠物,可以相互配合,则该参数将
class Caretaker[T <: Animal[T]](val pet1: T, val pet2: Animal[T]) {
matePets = pet2.mateWith(pet1)
}
是什么下划线意味着成为重要?任何有效的参数化类型的动物? – 2012-04-19 21:42:10
就我对scala的了解而言,下划线是一个通配符,在本质上意味着“我不在乎这里发生了什么”。对Animal类的参数化的限制会限制哪些类型可以有效地传递给Caretaker类。 – Steven 2012-04-19 21:45:25