最新项目中出现了类似于这样的代码:

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第一次创建时赋值的变量。

分类: Java

0 条评论

发表回复

您的电子邮箱地址不会被公开。