目录
函数式接口
3.1 什么是函数式接口
3.2 @functionalinterface注解 源码分析
3.3 Lambda表达式和函数式接口关系
3.4 使用函数式接口
函数式接口
3.1 什么是函数式接口
如果一个接口中只包含一个抽象方法,这个接口称为函数式接口
如果一个接口包含,一个抽象方法、一个默认方法、一个静态方法,这个接口也是函数式接口
3.2 @functionalinterface注解 源码分析
一个标记性注解
在定义接口是函数式接口时,可以使用 @functionalinterface 注解进行标注,该注解会在编译器对这个接口进行检查
如果使用@functionalinterface 注解来定义接口,编译器将会强制检查该接口,是否只有一个抽象方法,否则会报错。
3.3 Lambda表达式和函数式接口关系
Lambda表达式就是一个函数式接口的实例
如果一个对象是函数式接口的实例,那么该对象就可以用Lambda表达式,用匿名实现类表示的地方都可以用Lambda表达式替换
3.4 使用函数式接口
可以使用JDK中内置的函数式接口,也可以自定义函数式接口
案例1:
先定义一个函数式接口
@FunctionalInterface public interface MyFun<T> { T getValue(T t); }
写一个实现类,FunctionInterfaceDemo1,进行对给定字符串转为大写
/** * 函数式接口使用 */ public class FunctionInterfaceDemo1 { public static void main(String[] args) { //需求: 使用函数式接口,将给定的字符转为大写 //1.使用原始方法 System.out.println(toUpperCase("hello")); //2.使用函数式接口 String result1 = toLowerCase(new MyFun<String>() { @Override public String getValue(String s) { return s.toUpperCase(); } }, "hello"); System.out.println("result1:" + result1); String result2 = toLowerCase( s -> s.toUpperCase(), "hello"); System.out.println("result2:" + result2); } // 定义一个方法,将给定的字符串转为大写 public static String toUpperCase(String str) { return str.toUpperCase(); } /** * 将给定的字符串转为大写 * @param function 函数式接口 * @param str 给定字符串 * @return */ public static String toLowerCase(MyFun<String> function, String str) { return function.getValue(str); } }
运行结果:
未完,待更新