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))

エラー: パラメーター worker の暗黙的な値が見つかりませんでした: Worker[typeHolder.Typed] val worker = getWorker(getClassType(className))

4

1 に答える 1

3

それ無理。

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

于 2017-09-15T11:43:37.920 に答える