美文网首页
Kotlin-Lambda编程-Java函数式API的使用

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

作者: 陈饥饿 | 来源:发表于2022-03-09 08:42 被阅读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{

    }

    相关文章

      网友评论

          本文标题:Kotlin-Lambda编程-Java函数式API的使用

          本文链接:https://www.haomeiwen.com/subject/arrmrrtx.html