首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从类型参数派生泛型类的替代解决方案

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

Stack Overflow用户
提问于 2014-08-15 13:02:00
回答 2查看 175关注 0票数 0

我想创建一个泛型,允许我为多个类重用一些函数。理想情况下,我的设计是:

代码语言:javascript
复制
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。还有其他一些常见的设计模式如何解决这一问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-15 13:14:25

你可以使用特征和混合构图:

代码语言:javascript
复制
trait ColoredMesh extends Mesh {
  def Color(color:ColorRGBA) = {
    val vertices = super.getVertexCount
    // do something
  }
}

class ColoredSphere extends Sphere with ColoredMesh
票数 1
EN

Stack Overflow用户

发布于 2014-08-15 13:16:17

您可以使用自类型定义trait

代码语言:javascript
复制
trait Colored { self: Mesh =>
    def Color(color: ColorRGBA) = {
        self.getVertexCount
        //do something
    }
}

class ColoredSphere extends Sphere with Colored
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25326863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档