首页 文章

从类型参数派生类泛型的替代解决方案

提问于
浏览
0

我想创建一个泛型,允许我重用一些函数用于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找到类ColoredMesh [T <:Mesh]扩展T

由于技术原因,类似的Java问题Generic class to derive from its generic type parameter导致从泛型类型参数派生的答案是不可能的 . 我想这也适用于Scala . 还有其他一些常见的设计模式如何解决这个问题?

2 回答

  • 1

    您可以使用特征和混合组合:

    trait ColoredMesh extends Mesh {
      def Color(color:ColorRGBA) = {
        val vertices = super.getVertexCount
        // do something
      }
    }
    
    class ColoredSphere extends Sphere with ColoredMesh
    
  • 1

    您可以使用自我类型定义 trait

    trait Colored { self: Mesh =>
        def Color(color: ColorRGBA) = {
            self.getVertexCount
            //do something
        }
    }
    
    class ColoredSphere extends Sphere with Colored
    

相关问题