关于function:Function源码解析与实践

作者:陈昌浩1 导读if…else…在代码中常常应用,据说能够通过Java 8的Function接口来毁灭if…else…!Function接口是什么?如果通过Function接口接口毁灭if…else…呢?让咱们一起来摸索一下吧。 2 Function接口Function接口就是一个有且仅有一个形象办法,然而能够有多个非形象办法的接口,Function接口能够被隐式转换为 lambda 表达式。能够通过FunctionalInterface注解来校验Function接口的正确性。Java 8容许在接口中退出具体方法。接口中的具体方法有两种,default办法和static办法。 @FunctionalInterfaceinterface TestFunctionService{ void addHttp(String url);}那么就能够应用Lambda表达式来示意该接口的一个实现。 TestFunctionService testFunctionService = url -> System.out.println("http:" + url);2.1 FunctionalInterface2.1.1 源码@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface FunctionalInterface {}2.1.2 阐明 上图是FunctionalInterface的注解阐明。通过下面的注解阐明,能够晓得FunctionalInterface是一个注解,用来阐明一个接口是函数式接口。 函数式接口只有一个形象办法。 能够有默认办法,因为默认办法有一个实现,所以不是形象的。函数接口的实例能够用lambda表达式、办法援用或构造函数援用创立。 FunctionalInterface会校验接口是否满足函数式接口: 类型必须是接口类型,不能是正文类型、枚举或类。只能有一个形象办法。能够有多个默认办法和静态方法。能够显示笼罩java.lang.Object中的形象办法。编译器会将满足函数式接口定义的任何接口视为函数式接口,而不论该接口申明中是否应用FunctionalInterface注解。 3 Function接口次要分类Function接口次要分类: Function:Function函数的表现形式为接管一个参数,并返回一个值。Supplier:Supplier的表现形式为不承受参数、只返回数据。Consumer:Consumer接管一个参数,没有返回值。Runnable:Runnable的表现形式为即没有参数也没有返回值。3.1 FunctionFunction函数的表现形式为接管一个参数,并返回一个值。 3.1.1 源码@FunctionalInterfacepublic interface Function<T, R> { R apply(T t); default <V> Function<V, R> compose(Function<? super V, ? extends T> before) { Objects.requireNonNull(before); return (V v) -> apply(before.apply(v)); } default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) { Objects.requireNonNull(after); return (T t) -> after.apply(apply(t)); } static <T> Function<T, T> identity() { return t -> t; }}3.1.2 办法阐明apply:形象办法。将此函数利用于给定的参数。参数t通过具体的实现返回R。compose:default办法。返回一个复合函数,首先执行fefore函数利用于输出,而后将该函数利用于后果。如果任意一个函数的求值引发异样,则将其传递给组合函数的调用者。andThen:default办法。返回一个复合函数,该复合函数首先对其利用此函数它的输出,而后对后果利用after函数。如果任意一个函数的求值引发异样,则将其传递给组合函数的调用者。identity:static办法。返回一个始终返回其输出参数的函数。3.1.3 办法举例1)apply ...

November 29, 2022 · 3 min · jiezi