with函数是一个非常有用的函数,它可以简化很多代码量。
inline fun <T> with(t: T, body: T.() -> Unit) { t.body() }
with
函数接收一个 T
类型的对象和一个被作为扩展函数的函数。这个方法主要是让这个t
对象去执行body
函数。因为第二个参数是一个函数,所以第二个函数可以放在圆括号外边。我们可以在第二个参数里面创建代码块,在这个代码块里可以使用 this
和直接访问public
的方法和属性
例如java中的一段代码
TextView text=(TextView)findViewById(R.id.tv_text)
text.setText("hahaha")
text.setTextSize(23)
Kotlin代码
with(tv_text){
text="hahaha"
textSize=23
}
上面两段代码实现的功能是一样的,kotlin的代码更加简洁。
with函数中的参数是一个对象,我们可以带方法中直接引用对象的公有属性或者公有方法,而不用使用方法名。
如果一段代码你需要多次使用一个对象,那么你就可以使用with函数。
内联函数
内联函数与普通的函数有点不同。一个内联函数会在编译的时候被替换
掉,而不是真正的方法调用。这在一些情况下可以减少内存分配和运行时
开销。举个例子,如果我们有一个函数,只接收一个函数作为它的参数。
如果是一个普通的函数,内部会创建一个含有那个函数的对象。另一方
面,内联函数会把我们调用这个函数的地方替换掉,所以它不需要为此生
成一个内部的对象。