我想创建一个泛型方法来创建指定的类型参数的类实例。Scala:通过类型参数创建实例
代码变化条件: *尽可能最小变化P1 - P3班 其遗留代码的下方代码只是一个原型,理想没有在所有这些类别的变化。
看到我的代码如下。
trait P {
def run() : Unit = ???
}
class P1 (cfg : String) extends P {
override def run() : Unit = {
println("1")
}
}
class P2 (cfg : String)extends P {
override def run() : Unit = {
println("2")
}
}
class P3 (cfg : String) extends P {
override def run() : Unit = {
println("3")
}
}
def executor[T <: P](cfg: String): Unit = {
new T(cfg).run()
}
executor[P1]("someCfg")
executor[P2]("someCfg")
executor[P3]("someCfg")
这是错误我得到:
Error:(26, 10) class type required but T found
new T(cfg).run()
^
Error:(53, 10) class type required but T found
new T(cfg).run()
^
你必须帮助编译器。那么类似这样的东西:'def executor [T <:P](cfg:String)(fn:String => T):Unit = fn(cfg).run()'。然后像'executor(“someCfg”)(新的P1(_))'一样使用它。 –