从参数化类型引用抽象类型

时间:2011-11-16 07:59:57

标签: scala

给出这个例子:

abstract class Base { type Value }
case object Foo extends Base { type Value = String }

case class Bar[A <: Base](a: A, value: A#Value)

val x = Bar(Foo, "It's a Foo") // Won't compile with found String required ?#Value

我希望value的类型约束与A的类型相同。即String,因为我正在传递Foo。我知道我可以用不同的方式对其进行建模,但知道它是否可能会很好吗?

1 个答案:

答案 0 :(得分:2)

作为起点,这会编译并提供您需要的一些约束。

abstract class Base { type Value }
case object Foo extends Base { type Value = String }

case class Bar[A <: Base, V <: A#Value](a: A, value: V)

val x = Bar(Foo, "It's a Foo")