java8新特性之函数式接口

函数式接口(Functional Interface):
  1. 首先这一定先是个接口,在这个接口中有且只有一个抽象方法,我们称之函数式接口.
  2. 如果一个接口是函数式接口,我们可以在接口上添加@FunctionalInterface标签表明这个是一个函数式接口.
  3. 无论是否标识@FunctionalInterface,只要满足上面第1点的接口,java都会直接识别为函数式接口.
  4. 简化函数式接口的使用是java提供lambda表达式唯一的作用.
  5. 可以用接口直接来引用一个lambda表达式.
  6. 函数式接口里允许定义java.lang.Object里的public方法;
    函数式接口里允许定义默认方法;
    函数式接口里允许定义静态方法;
    函数式接口里允许子接口继承多个父接口,但每个父接口中都只能存在一个抽象方法,且必须的相同的抽象方法。
  7. lambda表达式中的异常处理:lambda表达式中产生的异常要么直接在代码块中处理,要么接口的方法声明抛出.

代码:
public class FunctionalInterfaceTest {
    public static void main(String[] args) {
        P p= new P() {
            public void myWrite(int i) {
                System.out.println(i);
            }
        };
        p.myWrite(123);
    }

    @FunctionalInterface
    interface P {
        void myWrite(int i);
    }
}

函数式接口完全是为实现Lambda而提出的。那现在我们利用Lambda表达式来改写上例:

public class FunctionalInterfaceTest {
    public static void main(String[] args) {
        P p = num -> System.out.println(num);
        p.myWrite(123);
    }

    @FunctionalInterface
    interface P {
        void myWrite(int i);
    }
}

你可能感兴趣的:(java8新特性之函数式接口)