我有以下课程:
class Test(env: {val configConsumner: ConfigurationConsumer})
我有val classInstance: Class[A]
个对象。我想用上面ducktype中指示的参数实例化这个类实例。我如何在Scala中执行此操作。
在Java中,您可以获得具有依赖关系的构造函数。然后使用反射使用参数实例化该构造函数。
谢谢!
答案 0 :(得分:4)
假设类型的构造函数没有参数,你可以这样做:
def createTest[A <: {val configConsumner: ConfigurationConsumer}](c: Class[A]): Test = new Test(c.newInstance())
如果构造函数确实有可以使用的参数:
def createTest[A <: {val configConsumner: ConfigurationConsumer}](c: Class[A], args: Any*): Test = {
val constructor = c.getConstructor(args.map(_.getClass) : _*)
val inst = constructor.newInstance(args.toArray : _*)
new Test(inst)
}