Scala使用Class创建实例,该类接受duck typing参数

时间:2014-05-29 16:24:33

标签: scala reflection duck-typing

我有以下课程:

class Test(env: {val configConsumner: ConfigurationConsumer})

我有val classInstance: Class[A]个对象。我想用上面ducktype中指示的参数实例化这个类实例。我如何在Scala中执行此操作。

在Java中,您可以获得具有依赖关系的构造函数。然后使用反射使用参数实例化该构造函数。

谢谢!

1 个答案:

答案 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)
}