2012-04-19 181 views
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) { 
    ... 
} 

但這是無效的,因爲動物需要參數化。我可以通過參數看守解決這個問題:

class Caretaker[T <: Animal[T]](val pet: Animal[T]) { 
    ... 
} 

,但是這是我在做什麼真的不必要。

有沒有更好的方法來做到這一點?

回答

3
class Caretaker(val pet: Animal[_]) { 
    ... 
} 
+0

是什麼下劃線意味着成爲重要?任何有效的參數化類型的動物? – 2012-04-19 21:42:10

+0

就我對scala的瞭解而言,下劃線是一個通配符,在本質上意味着「我不在乎這裏發生了什麼」。對Animal類的參數化的限制會限制哪些類型可以有效地傳遞給Caretaker類。 – Steven 2012-04-19 21:45:25

0

請注意,如果你想有一個看守照顧兩隻寵物,可以相互配合,則該參數將

class Caretaker[T <: Animal[T]](val pet1: T, val pet2: Animal[T]) { 
    matePets = pet2.mateWith(pet1) 
} 
相關問題