创建一个也使用构造函数参数的泛型actor子类

时间:2014-07-07 22:41:35

标签: scala akka scala-2.10

我有以下代码,其中T是一个actor子类,它也应该带有一个构造函数参数:

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))
  //...
}

编译器给出了错误:&#34;需要类类型但是找到T&#34;。我假设问题是,也可以在没有构造函数参数的情况下定义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)
  //...
}

然后我得到:&#34; T&#34;没有可用的清单。关于我做错什么的任何想法?谢谢

1 个答案:

答案 0 :(得分:1)

在第一次尝试中,您的代码因classOf[T]而失败。 classOf需要提供一个明确的类,它不能使用类型参数,即使它有ClassTag

在第二次尝试中,您需要ClassTag类型T,但createT需要ManifestManifest是[{1}}的子类型,可用的ClassTag无法安全地转发到ClassTag。你很接近,将要求改为Manifest,你的代码应该可以工作。

相关问题