我想將Companion對象的「註冊表」放在一起 - 通過將它們存儲在使用泛型綁定的列表中。伴侶對象在由相關類'super-trait綁定的列表中
一個例子是最好的:上FooLookup報道
trait Foo
case class A() extends Foo
object A
case class B() extends Foo
object B
case class C() extends Foo
object C
trait HasFoos {
def allFoos: List[ _ <: Foo.type]
}
case class FooLookup() extends HasFoos {
def allFoos = List(A,B,C)
}
錯誤 「DEF allFoos」 是
- 類型不匹配;發現:A.type required:Foo.type
HasFoos.allFoos需要什麼樣子,或者列表(A,B,C)需要什麼樣子。
我也試過def allFoos: List[ _ <: Foo]
;然而它也有錯誤,而且,我確實想用「伴侶對象」而不是類 - 我確信我需要更多通用的糖粉,但我不確定它需要什麼。
在此先感謝。
我想指出這裏的通配符:'def allFoos:List [_ <:Foo.type]'是不必要的,因爲Scala的類型方差。 Scala中的'List'是協變的,這意味着你可以安全地鍵入'List [String]'類型'List [Any]'的變量 - 這是Java永遠無法做到的。 – ghik 2013-03-09 12:55:47