2010-08-20 53 views
5

我是用如下创建一个通用的工厂打:在没有示例实例的情况下,scala中是否有方法来生成一个通用实例?

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

“新T()”不能编译,因为T是不确定的,直到运行时。我知道我可以通过在类的实例中传递一些方法来实现它(例如createInstance(classOf [Date]))

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

回答

10

这将工作:

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

如果,这就是它实例化的类有一个默认的(零ARG)构造函数。

+0

我打算把这个优秀的答案作为一个线索,它不能用一个特质来完成。 – 2010-08-21 05:20:50

+0

对不起,我应该指出的。 “特征不能有带上下文边界的类型参数”(编译器) – 2010-08-21 05:48:47

相关问题