指定抽象类型成员

时间:2017-02-01 06:59:14

标签: scala

有没有办法访问抽象类型的成员?

例如,如何为AFoo的{​​{1}}定义类型?

Bar

1 个答案:

答案 0 :(得分:3)

Qux只需(并且只能)提供A类型的单一定义,以满足FooBar的抽象要求,

case class Qux() extends Foo with Bar {
  type A = Int
}

如果FooBar中的一个或两个定义具体或有界,那么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
}

由于IntString的交集是空的,因此您的问题形式中FooBar的定义不太可能是您正在寻找的内容因为,以下是可能的,

trait Foo {
  type A <: Int
}

trait Bar {
  type A <: String
}

case class Qux() extends Foo with Bar {
  type A = Int with String // Uninhabited type
}