函数式接口
1. 函数式接口
1.1 概述
如果说一个接口内有且只有一个方法,而且该方法是一个缺省属性为public abstract方法,该接口可以称之为是一个函数式接口。
自定义函数式接口,还有系统中提供的函数式接口
Comparator<T> Runnable
可以直接理解JDK1.8的新特征,Lambda表达式来使用。
Lambda表达式对比匿名内部类使用
1. 简化了代码结构
2. 节约了内存资源
3. 让程序员更加关注,我要做什么,而不是为了做什么需要完成什么
1.2 @FunctionalInterface 使用
类似于
@Override
开启代码重写格式严格检查
/**
* 使用@FunctionalInterface检查函数式接口格式问题
* 要求当前接口中有且只有一个缺省属性为public abstract的方法
*
* @author Anonymous 2020/3/11 9:55
*/
@FunctionalInterface
public interface FunctionalType {
void test();
}
1.3 使用自定义的函数式接口作为方法的参数使用
package com.qfedu.a_functional;
/**
* 自定义函数式接口作为方法的参数演示
*
* @author Anonymous 2020/3/11 9:55
*/
public class Demo1 {
public static void main(String[] args) {
/*
使用匿名内部类来完成函数式接口的使用,但是这种方式有悖于函数式接口的目的
Low
useFunctionalInterface(new FunctionalType() {
@Override
public void test() {
System.out.println("匿名内部类的匿名对象直接作为方法的参数。");
}
});
int(*) (char **, int *)
C语言中的函数指针
如果是C语言中,这需要的参数是方法名
*/
useFunctionalInterface(() -> System.out.println("函数式接口 lambda表达式实现完成方法,实现目的"));
}
/**
* 使用一个函数式接口作为方法的参数
*
* @param ft 函数式接口的实现类对象,或者说直接操作本质,直接传入Lambda表达式
*/
public static void useFunctionalInterface(FunctionalType ft) {
ft.test();
}
}
代码中使用函数式接口
1. 让程序的目的性更强
2. 提供复用,普适性的价值
3. 节约资源