2

私は現在、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 で読みました)。

4

1 に答える 1