我正在玩创建一个通用工厂,如下所示:
trait Factory[T] { def createInstance():T = new T() }
val dateFactory = new Factory[Date](){}
val myDate = dateFactory.createInstance()
'new T()'无法编译,因为在运行时T未定义。我知道我可以通过将类的实例传递给某个方法来实现它(即createInstance(classOf [Date]))
我在问是否有一些内省魔法可以取代'新T()'以便我可以创建我的超级简单工厂?
答案 0 :(得分:10)
这将有效:
class Factory[T : ClassManifest] {
def
createInstance(): T =
(implicitly[ClassManifest[T]]).erasure.newInstance.asInstanceOf[T]
}
if 实例化它的类有一个默认的(零参数)构造函数。