我想创建一个泛型,允许我为多个类重用一些函数。理想情况下,我的设计是:
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找到 类ColoredMeshT <:Mesh扩展T
由于技术原因,类似的Java问题Generic class to derive from its generic type parameter导致了一个由泛型类型参数导出的答案是不可能的。我想这也适用于Scala。还有其他一些常见的设计模式如何解决这一问题?
发布于 2014-08-15 13:14:25
你可以使用特征和混合构图:
trait ColoredMesh extends Mesh {
def Color(color:ColorRGBA) = {
val vertices = super.getVertexCount
// do something
}
}
class ColoredSphere extends Sphere with ColoredMesh发布于 2014-08-15 13:16:17
您可以使用自类型定义trait:
trait Colored { self: Mesh =>
def Color(color: ColorRGBA) = {
self.getVertexCount
//do something
}
}
class ColoredSphere extends Sphere with Coloredhttps://stackoverflow.com/questions/25326863
复制相似问题