伴侣对象在由相关类'super-trait绑定的列表中
我想将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]
;然而它也有错误,而且,我确实想用“伴侣对象”而不是类 - 我确信我需要更多通用的糖粉,但我不确定它需要什么。
在此先感谢。
所以,正如所写的,我无法定义案例类FooLookup,因为我在定义特征HasFoos时遇到了“not found:value Foo”错误。
要让HasFoos按照书面进行编译,您必须在某个时候定义了一个对象Foo,以及特性,否?如果我这样做,HasFoos将编译。但是,“Foo.type”是单例对象Foo的类型,而不是扩展特质Foo的类的伴随对象的类型。
A.type将是对象A的类型。如果定义了它,它不会是实现伴随特征A的事物的类型。
我不认为有你想要的类型抽象,它会自动捕获描述“实现Foo的类型的伴随对象”。我想你必须自己定义这样一种类型:
trait FooCompanion
trait Foo
case class A() extends Foo
object A extends FooCompanion
case class B() extends Foo
object B extends FooCompanion
case class C() extends Foo
object C extends FooCompanion
trait HasFoos {
def allFoos: List[FooCompanion]
}
case class FooLookup() extends HasFoos {
def allFoos = List(A,B,C)
}
祝你好运!
你已经明确地定义了我的“想要”。 **“实现Foo的类型的伴侣对象。”**;所以加入“FooCompanion”特质肯定会让我获得我以前的样子。谢谢..(我想太难了) – Ramon 2013-03-09 15:00:04
我想指出这里的通配符:'def allFoos:List [_ ghik 2013-03-09 12:55:47