У меня есть следующий код, где 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». Любые идеи о том, что я делаю неправильно? Спасибо