1

我想创建一个带有类型参数的方法,显然它的构造函数上没有参数,并返回一个用该构造函数构造的虚拟对象。基本上是某种工厂模式。

  • 这在 Scala 中是否可行?
  • 这是一个好主意吗?如果不是,还有更好的模式吗?
  • 有没有办法仅在编译时实现这一点(即没有反射)?

代码示例:

trait Model
class A extends Model
class B extends Model

def dummy[T <: Model] = new T   // Fails compilation with "class type required but T found"

dummy[A]  // Returns an instance of A
dummy[B]  // Returns an instance of B
4

1 回答 1

4

这可以使用ClassManifests 来完成,它旨在克服擦除:

def dummy[T <: Model : ClassManifest] = classManifest[T].erasure.newInstance

至于在编译时进行而不进行反射,我想可以使用 scala 2.10 宏来完成。

于 2013-04-07T10:55:45.740 回答