Java8新特性学习笔记——函数式接口@FunctionalInterface

1、函数式接口@FunctionalInterface

指的是仅仅包含一个抽象方法的接口,可以认为任何一个Lambda 表达式都可以等价转换为对应的函数式接口,可以将任意只包含一个抽象方法的接口用作Lambda 表达式。使用 @FunctionalInterface 有助于编译器检查函数接口的合法性。

提醒:加不加@FunctionalInterface对于接口是不是函数式接口没有影响,该注解只是提醒编译器去检查该接口是否仅包含一个抽象方法。

如一个普通接口:

public interface OnClickListener {

    void onClick(String message);

    void onLongClick(int id);

    default void show() {
        System.out.println("hello");
    }

    static void print(String message) {
        System.out.println("message=" + message);
    }
}

一个普通接口,加上@FunctionalInterface就会编译报错 因为里面有两个抽象函数(default、static函数不受限制)

        Java8新特性学习笔记——函数式接口@FunctionalInterface_第1张图片

这个时候把第二个抽象函数onLongClick(int id)注释掉,就是一个函数式接口了。编译通过
         Java8新特性学习笔记——函数式接口@FunctionalInterface_第2张图片

 

2、Java8中的函数式接口

  • 2.1 Java8之前的函数式接口

      java.lang.Runnable

      java.util.concurrent.Callable

      java.security.PrivilegedAction

      java.util.Comparator

      java.io.FileFilter

      java.nio.file.PathMatcher

      java.lang.reflect.InvocationHandler

      java.beans.PropertyChangeListener

      java.awt.event.ActionListener

      javax.swing.event.ChangeListener

 

  • 2.2 Java8新增的函数式接口:

java8新增了一个包java.util.function,提供了很多函数式接口。

1 BiConsumer

代表了一个接受两个输入参数的操作,并且不返回任何结果

2 BiFunction

代表了一个接受两个输入参数的方法,并且返回一个结果

3 BinaryOperator

代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果

4 BiPredicate

代表了一个两个参数的boolean值方法

5 BooleanSupplier

代表了boolean值结果的提供方

6 Consumer

代表了接受一个输入参数并且无返回的操作

7 DoubleBinaryOperator

代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。

8 DoubleConsumer

代表一个接受double值参数的操作,并且不返回结果。

9 DoubleFunction

代表接受一个double值参数的方法,并且返回结果

10 DoublePredicate

代表一个拥有double值参数的boolean值方法

11 DoubleSupplier

代表一个double值结构的提供方

12 DoubleToIntFunction

接受一个double类型输入,返回一个int类型结果。

13 DoubleToLongFunction

接受一个double类型输入,返回一个long类型结果

14 DoubleUnaryOperator

接受一个参数同为类型double,返回值类型也为double 。

15 Function

接受一个输入参数,返回一个结果。

16 IntBinaryOperator

接受两个参数同为类型int,返回值类型也为int 。

17 IntConsumer

接受一个int类型的输入参数,无返回值 。

18 IntFunction

接受一个int类型输入参数,返回一个结果 。

19 IntPredicate

:接受一个int输入参数,返回一个布尔值的结果。

20 IntSupplier

无参数,返回一个int类型结果。

21 IntToDoubleFunction

接受一个int类型输入,返回一个double类型结果 。

22 IntToLongFunction

接受一个int类型输入,返回一个long类型结果。

23 IntUnaryOperator

接受一个参数同为类型int,返回值类型也为int 。

24 LongBinaryOperator

接受两个参数同为类型long,返回值类型也为long。

25 LongConsumer

接受一个long类型的输入参数,无返回值。

26 LongFunction

接受一个long类型输入参数,返回一个结果。

27 LongPredicate

R接受一个long输入参数,返回一个布尔值类型结果。

28 LongSupplier

无参数,返回一个结果long类型的值。

29 LongToDoubleFunction

接受一个long类型输入,返回一个double类型结果。

30 LongToIntFunction

接受一个long类型输入,返回一个int类型结果。

31 LongUnaryOperator

接受一个参数同为类型long,返回值类型也为long。

32 ObjDoubleConsumer

接受一个object类型和一个double类型的输入参数,无返回值。

33 ObjIntConsumer

接受一个object类型和一个int类型的输入参数,无返回值。

34 ObjLongConsumer

接受一个object类型和一个long类型的输入参数,无返回值。

35 Predicate

接受一个输入参数,返回一个布尔值结果。

36 Supplier

无参数,返回一个结果。

37 ToDoubleBiFunction

接受两个输入参数,返回一个double类型结果

38 ToDoubleFunction

接受一个输入参数,返回一个double类型结果

39 ToIntBiFunction

接受两个输入参数,返回一个int类型结果。

40 ToIntFunction

接受一个输入参数,返回一个int类型结果。

41 ToLongBiFunction

接受两个输入参数,返回一个long类型结果。

42 ToLongFunction

接受一个输入参数,返回一个long类型结果。

43 UnaryOperator

接受一个参数为类型T,返回值类型也为T。

具体可参考https://www.runoob.com/java/java8-functional-interfaces.html

你可能感兴趣的:(Java8新特性)