面试题答案
一键面试1. 语法区别
- let:调用者作为
it
参数传递给let
块,语法为obj.let { /* 代码块 */ }
。 - run:有两种形式,一种类似
let
,调用者作为it
参数,obj.run { /* 代码块 */ }
;另一种是作为扩展函数直接在对象上调用,obj.run { /* 代码块 */ }
,这种形式下this
指向调用者。 - apply:调用者作为
this
在apply
块内可用,语法为obj.apply { /* 代码块 */ }
。
2. 返回值区别
- let:返回
let
块内最后一行代码的结果。 - run:同
let
,返回run
块内最后一行代码的结果。 - apply:返回调用者对象本身。
3. 适用场景区别
- let:常用于需要对一个可空对象进行操作,并处理操作结果的场景,且希望返回处理后的结果。
- run:既可以用于处理可空对象,也可用于在对象上执行一系列操作并返回结果,当需要对对象做一些配置并返回配置结果时很有用。
- apply:主要用于对对象进行一系列属性设置操作,返回设置好属性后的对象本身。
4. 自定义JavaBean示例
假设我们有一个JavaBean类:
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在Kotlin中使用这三个函数:
- let示例:
val user = User()
val result = user.let {
it.name = "John"
it.age = 30
it.name.length
}
println(result) // 输出 4
- run示例:
val user = User()
val result = user.run {
name = "Jane"
age = 25
name.length
}
println(result) // 输出 4
- apply示例:
val user = User().apply {
name = "Bob"
age = 28
}
println(user.name) // 输出 Bob