Kotlin-Lambda编程-Java函数式API的使用

2022-03-09  本文已影响0人  陈饥饿

1、如果在Kotlin代码中调用了一个Java方法,并且该方法接收一个Java单抽象方法接口参数,就可以使用函数式API。

2、Java单抽象方法接口指的是接口中只有一个待实现方法,如果接口中有多个待实现方法,则无法使用函数式API。

3、Java原生API中有一个极为常见的单抽象方法接口——Runnable接口,这个接口中只有一个方法run()方法:

public interface Runnable{

    void run();

}

3.1、Thread类的构造方法中接受了一个Runnable参数:

new Thread(new Runnable(){//创建了一个Runnable接口的匿名类实例,并将它传给了Thread类的构造方法,最后调用Thread类的start()方法执行这个线程

    @override

    public void run(){

        System.out.println("Thread is running");

    }

}).start();

3.2将以上代码翻译成Kotlin版本:

Thread(object: Runnable{//由于Kotlin完全舍弃了new关键字,因此创建匿名类实例的时候就不能再使用new了,而是改用了object关键字

    override fun run(){

        println("Thread is running")

    }

}).start()

3.3、目前Thread类的构造方法是符合Java函数式API的使用条件的:

Thread(Runnable{//因为Runnable类中只有一个待实现方法,即使没有显式的重写run()方法,Kotlin也能自动明白Runnable后面的Lambda表达式就是要在run()方法中实现内容

    println("Thread is running")

}).start()

3.4、如果一个Java方法的参数列表中有且仅有一个Java单抽象方法接口参数,可以将接口名进行省略:

Thread({

    println("Thread is running")

}).start()

3.5、当Lambda表达式是方法的最后一个参数时,可以将Lambda表达式移到括号的外面,同时如果Lambda表达式还是方法的唯一一个参数,可以将方法的括号省略:

Thread{

    println("Thread is running")

}.start()

4、因为Android SDK还是使用Java语言编写的,当我们在Kotlin中调用这些SDK接口时,会用到Java函数式API的写法。

5、Android中的点击事件:

button.setOnClickListener(new View.OnClickListener(){

    @override

    public void onCLick(View v){

    }

});

用Kotlin代码实现同样的功能,可以用函数式API的写法:

button.setOnClickListener{

}

上一篇下一篇

猜你喜欢

热点阅读