【发布时间】: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 <: BaseGameObject with FooEntity吗?