遇到一个面试题,kotlin lazy委托的lambda表达式如果发生异常没执行完会发生什么?测试下呗,测试代码如下:
Kotlin
fun main() {
println(shiJu2)
println(shiJu2)
println("=========================================")
println(shiJu)
println(shiJu)
}
val shiJu:String by lazy {
throw IOException("虎为百兽尊,谁敢触其怒?唯有父子情,一步一回顾。") // 未捕获的异常
}
val shiJu2: String by lazy {
try {
// 这里可以是可能抛出异常的代码
throw IOException("虎为百兽尊,谁敢触其怒?唯有父子情,一步一回顾。")
} catch (e: IOException) {
// 异常时返回默认值
"半亩方塘一鉴开,天光云影共徘徊。问渠那得清如许?为有源头活水来。"
}
}
运行:

ok. 如果没有捕获异常会导致初始化失败,抛出异常。 捕获异常给个默认值就可以。