我有一个类似的工作通用特征:
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必须同时实现两者?
答案 0 :(得分:2)
trait Container[T <: BaseGameObject with FooEntity]
with关键字是开发人员如何将特征混合到其他类中。您可以将任意数量的特征混合到任何类中。