有没有办法'动态'/反射/等在Scala中创建带有参数的类的新实例?
例如:
class C(x: String)
manifest[C].erasure.newInstance("string")
但那可以编译。 (这也是,放心,在比这个简化的例子更有意义的上下文中使用!)
答案 0 :(得分:12)
erasure
的类型为java.lang.Class
,因此您可以使用构造函数(无论如何,在这个简单的情况下您不需要显示 - 您只需使用classOf[C]
)。您可以先使用newinstance
方法(使用对应的参数类型)找到对应的构造函数,然后只需在其上调用getConstructor
,而不是直接调用newInstance
:
classOf[C].getConstructor(classOf[String]).newInstance("string")