请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

kotlin 定义接口回调的一些疑问

场景: 在kotlin代码实现 Java方式的接口回调,每次都得重写一个object,如

 ConfirmDialog.newInstance()
                .setTitle("disconnect")
                .setMessage("Confirm disconnection?")
                .setOnConfirmClickListener(object : DialogInterface.OnClickListener {

                    override fun onClick(dialog: BaseDialog) {
                        mSolosDeviceManager.disconnect(matchAddress)
                        HomeHelper.instance.startHomActivity(this@FishGlassSettingActivity)
                        dialog.dismiss()
                    }

                })
                .show(supportFragmentManager)

但是java 的setOnClickListener方法因为lambda语法糖,又可以节省object,然后想着网上搜kotlin定义接口回调的方式是这样的

private lateinit var mListener: () -> Unit
    fun setOnClickListener(listener: () -> Unit) {
        this.mListener = listener
    }

虽然能实现,但听课后,有个纠结的点,课上老师说高阶函数内部会new一个Function,如果要优化,可以用inline修饰,如果如上定义接口回到,用inline修饰,提示inline无法修饰public函数

想请问下老师kotlin定义接口回调网上这种写法有没问题,有没更优解,然后不用inline修饰性能影响大吗?

正在回答

2回答

性能上,Java其实也不会节省对象,一般都会有对象构造出来。所以你的问题其实是用Kotlin写如何也能用lambda吧,定义参数类型的时候使用函数类型,或者Kotlin的fun interface类型或者Java定义的单一方法接口,都是可以的。
0 回复 有任何疑惑可以回复我~
  • 提问者 默小铭 #1
    我纠结课上提到的inline优化new对象上了,如果这么说,就是上面那种kotlin写法完全是没问题的,明白了
    回复 有任何疑惑可以回复我~ 2023-05-16 20:01:56
bennyhuo 2023-05-15 15:56:05
DialogInterface.OnClickListener 是Java单一方法接口,应该是支持sam的,Kotlin当中可以用lambda表达式简化的
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信