4
为了避免在对参数化类进行子类化时重复类型参数信息,我试图重写一些代码以使用抽象类型。与抽象类型交换类型参数
我想什么来表达类似:
class Group[A]
abstract class Thing[A, G <: Group[A]] {
val group: G
}
class SomeGroup[A] extends Group[A] { g =>
object SomeThing extends Thing[A, SomeGroup[A]] {
val group = g
}
}
使用抽象类型,我的最好的尝试,到目前为止是:
class Group {
type A
}
abstract class Thing { t =>
type A
type G <: Group { type A = t.A }
val group: G
}
class SomeGroup extends Group { g =>
object SomeThing extends Thing {
type A = g.A
type G = SomeGroup { type A = g.A }
val group = g
}
}
但是,我得到一个编译器错误最后一行说“价值组具有不兼容的类型”。
如何使用抽象类型编写第一个示例?
这比我想象的要简单。 :)为什么这里有必要的任何好理由? – 2011-12-23 19:10:03
我会想象没有任何帮助,类型检查器会将'g'的类型看作“SomeGroup”,除非使用类型注释,否则这就是分配给'group'的类型。尽管如此,不要听我的话。 – Philippe 2011-12-23 19:14:45