我有一个像这样声明的类:
class XYZ(implicit sys: ActorSystem) extends Enricher {
}
在函数中,我使用类的名称(这里:className)实例化类。
我试着这样做:
val clazz = Class.forName(className, true, getClass.getClassLoader)
asSubclass classOf [Enricher]
clazz.newInstance()
但这仅在构造函数不需要任何参数时才有效。
我该怎么做?
答案 0 :(得分:1)
如果你抓住正确的构造函数,你可以显式传递参数。 如果您知道只有一个构造函数,那么您可以这样做:
clazz.getConstructors.head.newInstance(sys)
如果有几个,你将不得不遍历它们,寻找一个,其参数的数量和它们的类型与你拥有的相匹配。
clazz
.getConstructors
.filter { _.getParameterTypes.size == 1 }
.find {
_.getParameterTypes.head.isAssignableFrom(classOf[ActorSystem])
}.newInstance(sys)