Ce que j'essaie de faire est: obtenir une instance implicite du nom de la classe. Le principal problème que je ne peux pas obtenir une instance implicite pour un type de classe créé lors de l'exécution.Obtenir une instance implicite par nom de classe
Ce que j'ai:
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
}
Ce que je veux faire: obtenir en quelque sorte une instance implicite du nom de la classe.
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))
Erreur: n'a pas pu trouver la valeur implicite pour les travailleurs des paramètres: travailleur [typeHolder.Typed] travailleur val = getWorker (getClassType (className))