私は現在、Scala の TypeTag リフレクション API に頭を悩ませることができません。Web 上で見つけられる情報はほとんどなく、あらゆる試行錯誤の試みはどこにも行きません。
def doStuff[T: TypeTag]( param: String ): SomeStuff[E] =
{
val t = typeOf[T]
if( <t extends one specific Trait from my application and is an object> )
{
<retrieve that companion object and return one of its values>
}
else
{
t match
{
case x if x =:= typeOf[String] => doOtherStuff[String]( param )
case x if x =:= typeOf[Int] => doOtherStuff[Int]( param )
...
}
}
}
Scala の定義済みの型とのパターン マッチングが機能しています。ただし、指定されたジェネリック引数が特定の Trait を継承し、後で実際のクラスの背後にあるコンパニオン オブジェクトを取得するかどうかを確認できませんでしたT
。単純に試してtypeOf[MyTrait[_, T]]
みると、MyTag で使用できる TypeTag がないことを示すコンパイラによって拒否されます。作成方法を教えてください。
さらに、特性の厄介なジェネリック シグネチャMyTrait[M <: MyTrait[M, E], E <: Entity[M, E]]
が全体を悪化させています。
この問題を解決するためのいくつかの役立つアイデアに加えて、さらに詳しいリンクを読んでいただければ幸いです (ただし、すべて SO で読みました)。