前提:Java 8中,接口可以包含的内容:

如果是Java 8,那么接口中可以包含的内容有:

(比Java8以前,多了 默认方法 和 静态方法

                1. 常量

                2. 抽象方法

                3. 默认方法

                4. 静态方法

详情参见:Java中的接口都是抽象方法吗?_Morning sunshine的博客-CSDN博客

·

什么是函数式接口?

        如果一个接口中,有且只有一个抽象方法,则该接口称之为函数式接口

        函数式接口可以使用Lambda表达式,lambda表达式会被匹配到这个抽象方法上 。

public interface 接口名{
    public void show(); 
    //可以同时有其它:默认方法、静态方法.....但不能再有抽象方法了
}

        为了确保你的接口一定达到这个要求,你只需要给你的接口添加 @FunctionalInterface 注解,编译器如果发现你标注了这个注解的接口有多于一个抽象方法的时候会报错提示:

@FunctionalInterface    
public interface 接口名{
    public void show(); 
    //可以同时有其它:默认方法、静态方法.....但不能再有抽象方法了
}

·

lambda语法格式:

        Lambda引入了新的操作符: ->(箭头操作符), ->将表达式分成两部分

        左侧:(参数1,参数2…),表示参数列表;

        右侧:{},内部是方法体;

格式: 

  •         (参数列表)  ->  实现语句。
  •        参数列表:使用逗号分隔参数,参数类型可省略,单参数括号可省略。
  •        实现语句:单行直接写,多行用{}包裹。

·

案例:定义和使用函数式接口

1,定义只有一个抽象方法的“接口”

@FunctionalInterface
public interface MathOperation {
    float operator(int a, int b);
}

2,使用函数式接口:

class LambdaTest {

    @Test
    void testLambdaOperator() {

        // 标准写法
        MathOperation add =  (a, b) -> {
            System.out.println("加法运算");
            return a + b;
        };

        // 简洁写法
        MathOperation subtruction = (a, b) -> a - b;

        System.out.println("add = " + add.operator(1,3));

        System.out.println("subtruction = " + subtruction.operator(1,3));
    }

}