传统的URL建造器是怎么使用的呢?类似于下面这样子:
//以下代码并不能运行,只是为了举例
val url=URLBuilder().protocal(“”).hostname(“”).post(“”).path(“”).addParam(“”,”“).build()
首先让我么们看看完成后的URL建造器的实际运用。
val u=url {
protocal { "http" }
hostname { "www.feintkotlin.com" }
port { 8080 }
path { "article/all" }
paramList {
param {
key { "name" }
value { "feint" }
}
param {
key { "age" }
value { "11" }
}
}
}
整个建造器给人的感觉就像是JSON字符串一样,具有层次结构,看起来清晰、舒服。虽然相较于传统的写法可能输入的代码量会稍微多一些,但也相差不大;为了可读性的提升,这一点小小的牺牲还是值得的。
接下来,让我们看看这样子的写法究竟是怎么实现的。
首先说明一下,将会用到语言特性:
lambda表达式(稍微接触过Kotlin的人,看到那些花括号后应该就能看出来了)
函数参数(在Kotlin中可以将函数作为参数使用)
扩展函数
整个url建造器的最外层是url{…},让我们看看它所对应的代码:
fun url(init: URL.() -> Unit): URL {
val url = URL()
url.init()