最新项目中出现了类似于这样的代码:
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
val objectTest2 = Test2<Any>()
objectTest2.test(3)
objectTest2.test(4)
}
}
internal class Test2<R> {
private var callBack: MyCallBack? = null
fun test(a: Int) {
if (callBack == null) {
callBack = object : MyCallBack {
override fun execute() {
println("a = $a")
}
}
}
callBack!!.execute()
}
}
internal interface MyCallBack {
fun execute()
}
addition_isCorrect方法执行的结果是:
a = 3
a = 3
这个就类似于ios里的block auto变量机制,在Java里不知道叫什么术语。如果callback不重新创建,callback里引用的变量如果是局部变量,变量永远是callback第一次创建时赋值的变量。
0 条评论