如何使用Class [T]参数实例化新的Scala类?

时间:2012-10-30 23:28:27

标签: scala akka

这是我现在的代码,我正在引用一个名为Processor的Akka Actor的子类:

def newProcessorProps(processorClass: Class[_ <: Processor]): Props = {
  Props(new processorClass).withDispatcher("dispatcher")
}

我无法弄清楚如何使用该参数实例化一个新类。我不认为这里不需要反思,因为我已经上课了。谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

如果您将类对象作为值,则可以通过调用其上的newInstance()方法进行实例化。所以你要这样做:

def newProcessorProps(processorClass: Class[_ <: Processor]): Props = {
  Props(processorClass.newInstance()).withDispatcher("dispatcher")
}

您还可以使用类型的清单来实例化该类型的对象

def newProcessorProps[T <: Processor](implicit m: Manifest[T]): Props = {
  Props(m.erasure.newInstance().asInstanceOf[T]).withDispatcher("dispatcher")
}

然后将其称为特定处理器,如下所示:

newProcessorProps[SpecificProcessor]

只有T我有一个无参数构造函数,这才有效。

答案 1 :(得分:0)

从技术上讲,它是Props(processorClass)或Props [ProcessorClassType],符合documentation