5

我正在创建一个通用工厂,如下所示:

trait Factory[T] { def createInstance():T = new T() }
val dateFactory = new Factory[Date](){}
val myDate = dateFactory.createInstance()

'new T()' 不会编译,因为 T 在运行时之前是未定义的。我知道我可以通过将类的实例传递给某个方法来使其工作(即 createInstance(classOf[Date]) )

我在问是否有一些内省魔法可以取代'new T()',这样我就可以创建我的超级简单工厂?

4

1 回答 1

10

这将起作用:

class Factory[T : ClassManifest] {
  def
  createInstance(): T =
    (implicitly[ClassManifest[T]]).erasure.newInstance.asInstanceOf[T]
}

如果为其实例化的类具有默认(零参数)构造函数。

于 2010-08-20T20:16:31.133 回答