函数式接口和Lambda表达式
函数式接口——@FunctionalInterface
@FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口。
通过JDK8源码javadoc,可以知道这个注解有以下特点:
1、该注解只能标记在"有且仅有一个抽象方法"的接口上。
2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。
4、该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。
// 正确的函数式接口@FunctionalInterfacepublic interface TestInterface { // 抽象方法 public void sub(); // java.lang.Object中的方法不是抽象方法 public boolean equals(Object var1); // default不是抽象方法 public default void defaultMethod(){ } // static不是抽象方法 public static void staticMethod(){ }}
示例:
@FunctionalInterfaceinterface IService { void insert(String message);}public class FunctionalInterfaceTest { public static void main(String[] args) { IService serviceObj = message -> System.out.println("Hello, " + message); serviceObj.insert("Sam"); }}
输出结果
Hello, Sam
Java8前已有的函数式接口
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新增的package→java.util.function
内含43个函数式接口:
Interface Description BiConsumer 代表了一个接受两个输入参数的操作,并且不返回任何结果 BiFunction 代表了一个接受两个输入参数的方法,并且返回一个结果 BinaryOperator 代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果 BiPredicate 代表了一个两个参数的boolean值方法 BooleanSupplier 代表了boolean值结果的提供方 Consumer 代表了接受一个输入参数并且无返回的操作 DoubleBinaryOperator 代表了作用于两个double值操作符的操作,并且返回了一个double值的结果 DoubleConsumer 代表一个接受double值参数的操作,并且不返回结果 DoubleFunction 代表接受一个double值参数的方法,并且返回结果 DoublePredicate 代表一个拥有double值参数的boolean值方法 DoubleSupplier 代表一个double值结构的提供方 DoubleToIntFunction 接受一个double类型输入,返回一个int类型结果 DoubleToLongFunction 接受一个double类型输入,返回一个long类型结果 DoubleUnaryOperator 接受一个参数同为类型double,返回值类型也为double Function 接受一个输入参数,返回一个结果 IntBinaryOperator 接受两个参数同为类型int,返回值类型也为int IntConsumer 接受一个int类型的输入参数,无返回值 IntFunction 接受一个int类型输入参数,返回一个结果 IntPredicate 接受一个int输入参数,返回一个布尔值的结果 IntSupplier 无参数,返回一个int类型结果 IntToDoubleFunction 接受一个int类型输入,返回一个double类型结果 IntToLongFunction 接受一个int类型输入,返回一个long类型结果 IntUnaryOperator 接受一个参数同为类型int,返回值类型也为int LongBinaryOperator 接受两个参数同为类型long,返回值类型也为long LongConsumer 接受一个long类型的输入参数,无返回值 LongFunction 接受一个long类型输入参数,返回一个结果 LongPredicate R接受一个long输入参数,返回一个布尔值类型结果 LongSupplier 无参数,返回一个结果long类型的值 LongToDoubleFunction 接受一个long类型输入,返回一个double类型结果 LongToIntFunction 接受一个long类型输入,返回一个int类型结果 LongUnaryOperator 接受一个参数同为类型long,返回值类型也为long ObjDoubleConsumer 接受一个object类型和一个double类型的输入参数,无返回值 ObjIntConsumer 接受一个object类型和一个int类型的输入参数,无返回值 ObjLongConsumer 接受一个object类型和一个long类型的输入参数,无返回值 Predicate 接受一个输入参数,返回一个布尔值结果 Supplier 无参数,返回一个结果 ToDoubleBiFunction 接受两个输入参数,返回一个double类型结果 ToDoubleFunction 接受一个输入参数,返回一个double类型结果 ToIntBiFunction 接受两个输入参数,返回一个int类型结果 ToIntFunction 接受一个输入参数,返回一个int类型结果 ToLongBiFunction 接受两个输入参数,返回一个long类型结果 ToLongFunction 接受一个输入参数,返回一个long类型结果 UnaryOperator 接受一个参数为类型T,返回值类型也为T
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~