我想創建一個泛型方法來創建指定的類型參數的類實例。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(_))'一樣使用它。 –