有没有办法访问抽象类型的成员?
例如,如何为A
和Foo
的{{1}}定义类型?
Bar
答案 0 :(得分:3)
类Qux
只需(并且只能)提供A
类型的单一定义,以满足Foo
和Bar
的抽象要求,
case class Qux() extends Foo with Bar {
type A = Int
}
如果Foo
和Bar
中的一个或两个定义具体或有界,那么Qux
中的定义必须满足它们两者,例如,
trait Foo {
type A <: AnyRef
}
trait Bar {
type A <: String
}
case class Qux() extends Foo with Bar {
type A = String // Bounded by both AnyRef and String
}
由于Int
和String
的交集是空的,因此您的问题形式中Foo
和Bar
的定义不太可能是您正在寻找的内容因为,以下是可能的,
trait Foo {
type A <: Int
}
trait Bar {
type A <: String
}
case class Qux() extends Foo with Bar {
type A = Int with String // Uninhabited type
}