2017-09-15 9 views
0

私がしようとしているのは、クラス名から暗黙のインスタンスを取得することです。 実行時に作成されたクラスタイプに対して、暗黙のインスタンスを取得できないという主な問題点があります。暗黙のインスタンスをクラス名で取得する

私が持っているもの:

trait Base 
case class A() extends Base 
case class B() extends Base 

trait Worker[T <: Base] { 
    def foo(t: T): Unit 
} 

implicit val workerA = new Worker[A] { 
    def foo(a: A): Unit = ??? // do some A specific work 
} 

implicit val workerB = new Worker[B] { 
    def foo(b: B): Unit = ??? // do some B specific work 
} 

私は何をしたい:何とかクラス名から暗黙のインスタンスを取得します。

trait TypeHolder { 
    type Typed <: Base 
    } 


    def getClassType(className: String): TypeHolder = className match { 
    case "A" => new TypeHolder { 
     type Typed = A 
    } 
    case "B" => new TypeHolder { 
     type Typed = B 
    } 
    } 

    def getWorker(typeHolder: TypeHolder)(implicit worker: Worker[typeHolder.Typed]): Worker[typeHolder.Typed] = worker 

    val className: String = ConfigFactory.load().getString("class-name") 
    val worker = getWorker(getClassType(className)) 

エラー:パラメータの労働者のための暗黙の値を見つけることができませんでした:労働者は、[typeHolder.Typed] ヴァル・労働者= getWorker(getClassType(クラス名))

答えて

3

不可能です。

暗黙的な解決はコンパイル時に解決されます。実行時の値によって影響を受けることはできません。

関連する問題