Имам следния код, където T
е подклас на актьор, който също трябва да приема аргумент на конструктор:
abstract class AbstractActor(dest: ActorRef) extends Actor {
//...
}
class ChildActor(dest: ActorRef) extends AbstractActor(dest) {
//...
}
class ParentActor[T <: AbstractActor : ClassTag] extends Actor {
val childRef = context.actorOf(Props(classOf[T], destActorRef))
//...
}
Компилаторът дава грешка: "необходим е тип клас, но е намерен T". Предполагам, че проблемът е, че човек може също да дефинира childActor без параметъра на конструктора:
class ChildActor extends AbstractActor(dest) {
//...
}
И така, опитах:
class ParentActor[T <: AbstractActor : ClassTag] extends Actor {
def createT(dest: ActorRef)(implicit ev: Manifest[T]): ActorRef =
context.actorOf(Props(ev.runtimeClass, dest))
val childRef = createT(destActorRef)
//...
}
Но тогава получавам: „няма наличен манифест за T“. Някакви идеи какво правя грешно? Благодаря ти