kotlin匿名内部类问题(初学者)


#1

初学kotlin,下面三段代码,编译的时候都没有报错,但是第一、二段无效,第三段有效。

    //1、无效,按提示转换后就是第二段代码
    swipe.setOnRefreshListener {
        object:SwipeRefreshLayout.OnRefreshListener {
            override fun onRefresh() {
                Toast.makeText(applicationContext, "12", Toast.LENGTH_LONG).show()
                swipe.isRefreshing = false
            }
        }
    }

    //2、无效代码
    swipe.setOnRefreshListener {
        SwipeRefreshLayout.OnRefreshListener {
            Toast.makeText(applicationContext, "12", Toast.LENGTH_LONG).show()
            swipe.isRefreshing = false
        }
    }

    //3、有效
    swipe.setOnRefreshListener {
        Toast.makeText(applicationContext, "12", Toast.LENGTH_LONG).show()
        swipe.isRefreshing = false
    }

问题:
1、为什么第一、二段无效
2、为什么第一、二段代码编译不报错

请大家不吝赐教,不胜感激


#2

因为本身大括号就是创建了一个匿名内部类,前两个相当于在你的listener里面执行了一段创建一个对象的代码,第三个才是把你创建的对象当作listener传了进去


#3

确实是这样,第1、2段{}改成()以传参就正常运行了。非常感谢。


京ICP备16022265号-2 Kotlin China 2017 - 2018
本站由腾讯云提供计算服务