scala中是否有一种方法可以在没有示例实例的情况下生成通用实例?

时间:2010-08-20 19:27:53

标签: generics scala factory traits

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

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

'new T()'无法编译,因为在运行时T未定义。我知道我可以通过将类的实例传递给某个方法来实现它(即createInstance(classOf [Date]))

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

1 个答案:

答案 0 :(得分:10)

这将有效:

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

if 实例化它的类有一个默认的(零参数)构造函数。