【问题标题】:Make a generic trait which requires it's parameterized type to inherit from 2 other traits制作一个通用特征,它需要它的参数化类型从其他 2 个特征继承
【发布时间】:2016-09-09 14:40:24
【问题描述】:

我有一个像这样的通用特征:

trait Container[T <: BaseGameObject] {
  val contents = new mutable.HashMap[Int, T]

容器是我的游戏中可以包含其他游戏实体(例如包、房间)的对象。

BaseGameObject 是我游戏中所有主要类型的东西都必须实现的特征。

case class Room(sn: Int, snGenerator: () => Int) extends BaseGameObject with Container[Thing] {

我想通过组合一堆特征来定义游戏中的主要实体类型,其中一些特征将被参数化。例如,在上面,我说房间是基本游戏对象,也是事物的容器。

但是,如果我想说 Container 中的 T 必须实现多个特征呢?例如,而不是说

trait Container[T <: BaseGameObject]

我想要一些与以下伪代码含义相同的东西:

trait Container[T <: (BaseGameObject AND FooEntity)]

我希望这意味着每当我使用容器时,我可以确定 T 实现了 BaseGameObject 和 FooEntity。

有没有一种语法可以说我的通用特征中的 T 必须同时实现?

【问题讨论】:

  • 你试过T &lt;: BaseGameObject with FooEntity吗?

标签: scala generics


【解决方案1】:
trait Container[T <: BaseGameObject with FooEntity] 

with 关键字是开发人员将特征混合到其他类中的方式。您可以将任意数量的特征混合到任何类中。

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多