scala:在隐式类中定义的导入函数
我想将静态实用程序附加到那些扩展了名为Application的特性的类scala:在隐式类中定义的导入函数,scala,implicit,Scala,Implicit,我想将静态实用程序附加到那些扩展了名为Application的特性的类 trait Application { def name: String } case class TestApp(name: String) extends Application object ImplicitConf { implicit class AppConfig[T <: Application](val app: T) { lazy val conf = loadConfig
trait Application {
def name: String
}
case class TestApp(name: String) extends Application
object ImplicitConf {
implicit class AppConfig[T <: Application](val app: T) {
lazy val conf = loadConfig
def loadConfig = {
ConfigFactory.load(app.name)
}
def getString(path: String): String = conf.getString(path)
}
}
但我太贪心了,我该怎么隐藏电话
val test = app.getString("hello")
进入
您可以显式地将app:Application转换为appWithConfig:AppConfig,并导入appWithConfig:AppConfig的所有方法
val appWithConfig = new AppConfig(app)
import appWithConfig._
您可以显式地将app:Application转换为appWithConfig:AppConfig,并导入appWithConfig:AppConfig的所有方法
val appWithConfig = new AppConfig(app)
import appWithConfig._
我最好的选择是引用父对象中的方法:
object ImplicitConf {
def getString[T <: Application](str: String)(implicit app: T) = AppConfig(app).getString(str)
implicit class AppConfig[T <: Application](val app: T) {
@transient lazy val conf = loadConfig
def loadConfig = {
ConfigFactory.load(app.name)
}
def getString(path: String): String = conf.getString(path)
}
}
我最好的选择是引用父对象中的方法:
object ImplicitConf {
def getString[T <: Application](str: String)(implicit app: T) = AppConfig(app).getString(str)
implicit class AppConfig[T <: Application](val app: T) {
@transient lazy val conf = loadConfig
def loadConfig = {
ConfigFactory.load(app.name)
}
def getString(path: String): String = conf.getString(path)
}
}
您可以从应用程序导入所有内容。导入应用程序。\u抱歉,此评论与隐式无关。您可以从应用程序导入所有内容。导入应用程序。\u抱歉,该评论与implicitthanks的响应无关。正如我在文章中提到的,我想通过使用隐式类将静态实用程序附加到应用程序特性来扩展我的应用程序特性。这与我的特定需求无关,尤其是当我不希望多个配置对象的实例停留在我的周围时。对象TestAppConf使用应用程序{override val name=“TestAppConf”val test=this.getString(“hello”)println(s“配置值为$test”)}扩展应用程序。感谢您的响应。正如我在文章中提到的,我想通过使用隐式类将静态实用程序附加到应用程序特性来扩展我的应用程序特性。这与我的特定需求无关,尤其是当我不希望多个配置对象的实例停留在我的周围时。对象TestAppConf使用应用程序{override val name=“TestAppConf”val test=this.getString(“hello”)println(s“配置值为$test”)}扩展应用程序
object TestAppConf extends App {
implicit val app: Application = TestApp("TestAppConf")
val test = getString("hello")
println(s"The Config value is $test")
}