【问题标题】:Get an implicit instance by class name通过类名获取隐式实例
【发布时间】:2017-09-15 19:43:37
【问题描述】:

我想做的是:从类名中获取一个隐式实例。 我无法获得在运行时创建的类类型的隐式实例的主要问题。

我有什么:

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

【问题讨论】:

    标签: scala implicit implicits scala-implicits


    【解决方案1】:

    这是不可能的。

    隐式解析在编译时解决:它不受运行时值的影响。

    【讨论】:

      猜你喜欢
      • 2011-01-03
      • 1970-01-01
      • 2014-06-15
      • 2014-11-18
      • 2020-07-23
      • 1970-01-01
      • 2010-10-05
      相关资源
      最近更新 更多