apply函数
apply函数扩展了所有的泛型对象,在闭包范围内可以任意调用该对象的任意方法,并在最后返回该对象.
主要的作用:是可以用来简化初始化对象的功能
fragment = NewFragment().apply {
arguments = bundle
supportFragmentManager.beginTransaction()
.replace(R.id.fragment, this)
.commit()
}
let函数
判空
var name:String? = null
var map = HashMap<String>()
// name是可变变量,IF 条件判断不等于空,对于编译器来讲name还是可空变量,所以必须先赋值到val变量
val theName = name
if(theName !=null){
//此时theName是不可空变量
map[theName] = "OK"
}
// 使用?.let方法简化上面的代码
name?.let{
map[it] = "OK"
}
run函数
1.全局函数run替代java代码中的{}代码块
2.函数省略定义返回类型
@Get("/user/list")
fun list(): List<User>{
return service.findUsers()
}
// 简写成
@Get("/user/list")
fun list() = run {
service.findUsers()
}
also函数
also 通过it访问当前变量,并且整体返回自己。所以可以模拟赋值语句当做表达式的效果。
public void test(BufferedReader reader) throws IOException {
String line;
while ( (line=reader.readLine())!=null ){
System.out.println(line);
}
}
fun test(reader: BufferedReader) {
var line: String?
while (reader.readLine().also { line = it } != null) {
println(line)
}
}
with函数
消除对同一个变量多次引用
val user= User()
user.setName("xxx")
user.doSome()
user.ddd()
// 使用with修改为
with(user){
this.setName("xxx")
this.doSome()
this.ddd()
}
// 进一步省略this
with(user){
setName("xxx")
doSome()
ddd()
}