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方法。
@FunctionalInterface
interface TestFunctionService
{
void addHttp(String url);
}
复制代码
那么就可以使用Lambda表达式来表示该接口的一个实现。
TestFunctionService testFunctionService = url -> System.out.println("http:" + url);
复制代码
2.1 FunctionalInterface
2.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 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