OK、次のようなことができることがわかりました。
trait MyTrait[T <: MyTrait[T]] { self: T =>
val listOfT: List[T]
def getFirst: T
def getOne: T = if (listOfT.length > 0) getFirst else self
}
class MyClass extends MyTrait[MyClass] {
override val listOfT: List[MyClass] = List[MyClass](this)
override def getFirst: MyClass = listOfT.head
}
MyTrait にコンパニオン オブジェクトを持たせたい場合は、次のようになります。
object MyTrait{
def doSomething[T <: MyTrait[T]](aninstance:T)= { ... }
}
それはすべて醜いようで、もっと良い方法を見たいと思っていますが、今のところ、他の場所から型を参照するにはどうすればよいかを理解しようとしています。例えば:
case class Foo( anInstanceOfMyTrait: MyTrait[what goes here???] )
それとももっと簡単な方法がありますか?