加载使用Scala Relefection扩展trait的对象

加载使用Scala Relefection扩展trait的对象,scala,reflection,Scala,Reflection,以下示例: trait Config { val values: Map[String, String] def get(id: String): Option[String] = values.get(id) } object Config { def apply(): Config = { // Here I need a way to return the 'LocalConfig' object } } object LocalConfig extends C

以下示例:

trait Config {
  val values: Map[String, String]
  def get(id: String): Option[String] = values.get(id)
}

object Config {
  def apply(): Config = {
    // Here I need a way to return the 'LocalConfig' object
  }
}

object LocalConfig extends Config {
  override val values: Map[String, String] = Map("ID" -> "Value")
}

println(Config().get("ID")) // => "Value"
是否有任何方法可以从apply动态返回LocalConfig对象,这样它就可以独立于对象LocalConfig的命名方式工作


谢谢你

如果你对代码有足够的控制来确保只有一个这样的对象,那么你可能有足够的控制权来根据需要命名它。所以你基本上想枚举给定特征的所有子类,然后根据一些逻辑选择其中一个?嗨,尤金:是的,这就是我喜欢做的。