IT评测·应用市场-qidao123.com

标题: Function源码解析与实践 [打印本页]

作者: 反转基因福娃    时间: 2022-11-29 17:34
标题: Function源码解析与实践
作者:陈昌浩

1 导读

if…else…在代码中经常使用,听说可以通过Java 8的Function接口来消灭if…else…!Function接口是什么?如果通过Function接口接口消灭if…else…呢?让我们一起来探索一下吧。
2 Function接口

Function接口就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,Function接口可以被隐式转换为 lambda 表达式。可以通过FunctionalInterface注解来校验Function接口的正确性。Java 8允许在接口中加入具体方法。接口中的具体方法有两种,default方法和static方法。
  1. @FunctionalInterface
  2. interface TestFunctionService
  3. {
  4.     void addHttp(String url);
  5. }
复制代码
那么就可以使用Lambda表达式来表示该接口的一个实现。
  1. TestFunctionService testFunctionService = url -> System.out.println("http:" + url);
复制代码
2.1 FunctionalInterface

2.1.1 源码
  1. @Documented
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Target(ElementType.TYPE)
  4. public @interface FunctionalInterface {}
复制代码
2.1.2 说明


上图是FunctionalInterface的注解说明。通过上面的注解说明,可以知道FunctionalInterface是一个注解,用来说明一个接口是函数式接口。 函数式接口只有一个抽象方法。 可以有默认方法,因为默认方法有一个实现,所以不是抽象的。函数接口的实例可以用lambda表达式、方法引用或构造函数引用创建。
FunctionalInterface会校验接口是否满足函数式接口:
编译器会将满足函数式接口定义的任何接口视为函数式接口,而不管该接口声明中是否使用FunctionalInterface注解。
3 Function接口主要分类

Function接口主要分类:
3.1 Function

Function函数的表现形式为接收一个参数,并返回一个值。
3.1.1 源码

[code]@FunctionalInterfacepublic interface Function {    R apply(T t);    default  Function compose(Function




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4