[英]scala: import functions defined inside implicit class
我想將靜態實用程序附加到那些擴展了稱為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
def loadConfig = {
ConfigFactory.load(app.name)
}
def getString(path: String): String = conf.getString(path)
}
}
現在,以下工作正常:
import Application, TestApp
import ImplicitConf._
import AppUtil._
object TestAppConf extends App {
val app: Application = TestApp("TestAppConf")
val test = app.getString("hello")
println(s"The Config value is $test")
}
但是我太貪心了,我怎么隱瞞電話
val test = app.getString("hello")
進入
val test = getString("hello")
您可以將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 TestAppConf extends App {
implicit val app: Application = TestApp("TestAppConf")
val test = getString("hello")
println(s"The Config value is $test")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.