函数式接口

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() {
            @Override
            public 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线程启动了 

你可能感兴趣的:(java)