【问题标题】:Scala create instance with Class which accepts duck typing parameterScala使用接受鸭子类型参数的类创建实例
【发布时间】:2014-05-29 16:24:33
【问题描述】:

我有以下课程:

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

我有val classInstance: Class[A] 对象。我想用上面的ducktype中指示的参数来实例化这个类实例。我如何在 Scala 中做到这一点。

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

谢谢!

【问题讨论】:

  • 我对你的问题感到困惑。 A 类型是否有一个构造函数,该构造函数采用由 Test 类中的鸭子类型示例 env 定义的实例?换句话说,A 的构造函数是否与 Test 的构造函数匹配?

标签: scala reflection duck-typing


【解决方案1】:

假设类型的构造函数没有你可以做的参数:

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

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多