如何在不引入第三个类型参数的情况下在Scala泛型中请求相同的类型?

时间:2014-10-14 06:00:44

标签: scala generics

现在我的特质有一个额外的类型T除了确保BR具有相同的泛型类型之外没有其他用途。

trait GenericBuilder[T <: Any, B <: Builder[T], R <: Result[T]]

为了简化声明,我想知道在保持类型严格性的同时是否有办法在这种情况下消除T

编辑:我无法控制BuilderResult代码 - 它们是从外部的一些java工件中提取的。

1 个答案:

答案 0 :(得分:2)

如果您只是想简化声明的那一部分,您可以将类型移动到成员中,但最后您必须购买更多信息,因为您需要证明类型是相同的:

trait Builder {
  type T
}
trait Result {
  type T
}
trait GenericBuilder[B <: Builder, R <: Result] {
  val w: B.T =:= R.T
}