制作一个通用特征,要求它的参数化类型继承其他2个特征

时间:2016-09-08 21:12:34

标签: scala generics

我有一个类似的工作通用特征:

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

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

BaseGameObject是我游戏中所有主要事物必须实现的特征。

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

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

但是,如果我想说容器中的T必须实现多个特性,那该怎么办呢?例如,而不是说

trait Container[T <: BaseGameObject]

我喜欢与下面的伪代码相同的东西:

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

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

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

1 个答案:

答案 0 :(得分:2)

trait Container[T <: BaseGameObject with FooEntity] 

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