从Scala中的类型参数创建对象

时间:2013-04-07 10:39:23

标签: scala factory

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

  • 在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

1 个答案:

答案 0 :(得分:4)

这可以使用旨在克服擦除的ClassManifest来完成:

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

至于在没有反射的编译时这样做,我想可以使用scala 2.10宏来完成。