2016-09-08 11 views
1

から継承するパラメータ化された型だが必要です一般的な形質を行いますは、それは私がこのような何かの作業の一般的な形質を持っている2つの他の形質

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

コンテナは他のゲームのエンティティ(例えばを含めることができます私のゲーム内のオブジェクトですバッグ、部屋)。

BaseGameObjectは、ゲームの主な種類のものすべてを実装する必要がある特性です。

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

ゲームの主な種類のエンティティを、特性の束を構成することによって定義したいと思います。その一部はパラメータ化されます。たとえば、上の例では、RoomsはBasicGameObjectsであり、Containers of Thingsであるとも言います。

しかし、コンテナ内のTが複数の特性を実装しなければならないとしたらどうでしょうか?たとえば、代わりに

trait Container[T <: BaseGameObject] 

を言って、私は次の擬似コードと同じ意味で何か欲しい:

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

をそして私は、私は、これは私がコンテナを使用するたびにすることを意味したいのですがTがBaseGameObjectとFooEntityの両方を実装していることを確認できます。

私のジェネリック特性のTは両方を実装しなければならないと言う構文がありますか?

+0

'T <:BaseGameObject with FooEntity'を試しましたか? –

答えて

2
trait Container[T <: BaseGameObject with FooEntity] 

キーワードは、開発者が形質を他のクラスにミックスする方法です。任意のクラスに任意の数の特性を混在させることができます。

関連する問題