使用JAVA函数式接口

在Kotlin中可以传递一个Lambda代替OnClickListener实例:

button.setOnClickListener { view ->  ... }

这种方式可以工作的原因是OnClickListener接口只有一个抽象方法。这种接口被称为函数式接口或者SAM接口,SAM代表单抽象方法。

1.1、把lambda当做参数传递给Java方法

1.2、SAM构造方法:显示地把lambda转换成函数式接口

SAM构造方法 是编译器生成的函数,让你执行从labmbda函数式接口实例显示转换。可以在编译器不会自动应用转换的上下文中使用它。

使用SAM构造方法返回值

fun   createAllDoneRunnable():Runnable{

        return  Runnable { println("All  done !") }

}

createAllDoneRunnable().run()

SAM构造方法的名称和底层函数式接口的名称一样。SAM构造方法只接收一个参数——一个呗用作函数式接口单抽象方法体的lambda——并返回实现了这个接口的累的一个实例。

SAM构造方法把lambda生成的函数是接口实例存储在一个变量

val listener=OnClickListenner{ view->

        val  text =when(view.id){

               R.id.button1->"First  button"

               R.id.button2->"Second Button"

               else->"Unknow button"

         }

         toast(text)

}

button1.setOnClickListener(listener)

button2.setOnClickListener(listener)

ps:看完真的是一脸蒙蔽。

你可能感兴趣的:(使用JAVA函数式接口)