我想创建一个泛型,允许我重用一些函数用于mutliple类。理想情况下,我的设计是:
class ColoredMesh[T <: Mesh] extends T
{
def Color(color:ColorRGBA) = {
val vertices = super.getVertexCount
// do something
}
}
class ColoredSphere extends ColoredMesh[Sphere]
class ColoredCylinder extends ColoredMesh[Cylinder]
但是,这会产生编译错误:
错误:(7,38)需要类类型,但发现T
class ColoredMesh [T&lt;:Mesh]扩展T
由于技术原因,类似的Java问题Generic class to derive from its generic type parameter导致从泛型类型参数派生的答案是不可能的。我想这也适用于Scala。还有其他一些常见的设计模式如何解决这个问题?
答案 0 :(得分:1)
您可以使用特征和混合成分:
trait ColoredMesh extends Mesh {
def Color(color:ColorRGBA) = {
val vertices = super.getVertexCount
// do something
}
}
class ColoredSphere extends Sphere with ColoredMesh
答案 1 :(得分:1)
您可以使用自我类型定义trait
:
trait Colored { self: Mesh =>
def Color(color: ColorRGBA) = {
self.getVertexCount
//do something
}
}
class ColoredSphere extends Sphere with Colored