> 文章列表 > 函数式接口

函数式接口

函数式接口

1.函数接口概述:

函数式接口:有且仅有一个抽象方法的接口

java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以适用于:ambda使用的接口。只有确保接口中有且仅有一个抽象方法,java中的Lambda才能顺利的进行推导。

如何检测一个接口是不是函数式接口呢?

        @FunctionalInterface

        放在接口定义的上方:如果接口是函数式接口,编译通过,如果不是,编译失败

注意

        我们自己定义函数式接口的时候@FunctionalInterface是可选的,就算我不写这个注解,只要保证满足函数式接口定义的条件,也照样是函数式接口。但是,建议加上该注解

函数式接口作为方法的参数

需求

        定义一个类(RunnableDemo),在类中提供两个方法

                一个方法是:startThread(Runnable r) 方法参数Runnable是一个函数式接口

                一个方法是主方法,在主方法中调用startThread方法

如果方法的参数是一个函数式接口,我们可以使用Lambda表达式作为参数传递

        startThread(() -> System.out.println(Thread.currentThread().getName()+"线程启动了"));

package com.aynu23;//    需求
//        定义一个类(RunnableDemo),在类中提供两个方法
//            一个方法是:startThread(Runnable r) 方法参数Runnable是一个函数式接口
//            一个方法是主方法,在主方法中调用startThread方法public class RunnableDemo {public static void main(String[] args) {//在主方法中调用startThread方法//匿名内部类startThread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "线程启动了");}});//Lambda表达式改进startThread(() -> System.out.println(Thread.currentThread().getName() + "线程启动了"));}private static void startThread(Runnable r) {
//        Thread t=new Thread(r);
//        t.start();new Thread(r).start();}
}

Thread-1线程启动了
Thread-0线程启动了