函数式编程@FunctionalInterface

来源:互联网 发布:数据分析员的岗位职责 编辑:程序博客网 时间:2024/05/17 08:14

函数式接口是Java8对java8对一类特殊类型的接口的称呼.这类接口定义了唯一的抽象方法的接口.函数式接口代表一种契约,一种对某个特定函数类型的契约.在它出现的地方,实际期望一个符合契约要求的函数.这个注解主要用于编译器错误检查,加上该注解后,当写的接口不符合函数式接口定义的时候会报错

JDK8之前已有的函数式接口

java.lang.Runnablejava.util.concurrent.Callablejava.security.PrivilegedActionjava.util.Comparatorjava.io.FileFilterjava.nio.file.PathMatcherjava.lang.reflect.InvocationHandlerjava.beans.PropertyChangeListenerjava.awt.event.ActionListenerjavax.swing.event.ChangeListener

java8新定义的函数式接口

Predicate -- 传入一个参数,返回一个bool结果, 方法为boolean test(T t)Consumer -- 传入一个参数,无返回值,纯消费。 方法为void accept(T t)Function -- 传入一个参数,返回一个结果,方法为R apply(T t)Supplier -- 无参数传入,返回一个结果,方法为T get()UnaryOperator -- 一元操作符, 继承Function,传入参数的类型和返回类型相同。BinaryOperator -- 二元操作符, 传入的两个参数的类型和返回类型相同, 继承BiFunction

用法

函数式接口可以额外定义多个抽象方法,但是这些抽象方法签名必须和Object的public方法一样.为什么要这样规定呢?原因在于接口最终都有确定的类实现而类的最终父类是Object.因此函数式接口可以定义Object的public方法

@FunctionalInterfacepublic interface ObjectMethodFunctionalInterface {    void count(int i);    String toString();    int hashCode();    boolean equals(Object o);}

示例

@FunctionalInterfaceinterface FunctionalException {    void apply(int i) throws Exception;}public class FunctionalTest {    public static void main(String[] args) {        FunctionalException functionalInterface = i -> {            System.out.println("apply");        };        try {            functionalInterface.apply(10);        } catch (Exception e) {            e.printStackTrace();        }    }}
原创粉丝点击