1、函数式接口简介
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
使用场景:将函数作为方法参数传递
2、函数式接口案例
1、定义函数式接口
package com.example; // @FunctionalInterface注解 检查一个接口是否是一个函数式接口 @FunctionalInterface public interface MyFunctionInterface { void show(); }
2、使用函数式接口
package com.example; public class Demo { // 定义一个方法以函数式接口作参数 public static void test(MyFunctionInterface myFunctionInterface) { myFunctionInterface.show(); } public static void main(String[] args) { // 1.使用匿名内部类的方式 MyFunctionInterface myFunctionInterface = new MyFunctionInterface() { @Override public void show() { System.out.println("Hello 1"); } }; test(myFunctionInterface); // 2.直接传递匿名内部类 test(new MyFunctionInterface() { @Override public void show() { System.out.println("Hello 2"); } }); // 3.使用Lambda表达式的方式使用函数式接口 test(() -> System.out.println("hello 3")); } }
3、常用函数式接口
1、消费型接口
定义
// 有参无返回值 @FunctionalInterface public interface Consumer<T> { void accept(T t); }
示例
package com.example; import java.util.function.Consumer; public class Demo { // 定义一个方法以函数式接口作参数 public static void test(Consumer<Integer> consumer, Integer value) { consumer.accept(value); } public static void main(String[] args) { test((value) -> System.out.println(value), 20); // 20 } }
2、供给型接口
定义
// 无参有返回值 @FunctionalInterface public interface Supplier<T> { T get(); }
示例
package com.example; import java.util.function.Supplier; public class Demo { public static Integer test(Supplier<Integer> supplier) { return supplier.get(); } public static void main(String[] args) { Integer value = test(() -> 20); System.out.println(value); // 20 } }
3、函数型接口
定义
// 有参有返回值 @FunctionalInterface public interface Function<T, R> { R apply(T t); }
示例
package com.example; import java.util.function.Function; public class Demo { public static Integer test(Function<Integer, Integer> function, Integer value) { return function.apply(value); } public static void main(String[] args) { Integer value = test((x) -> x * 10, 2); System.out.println(value); // 20 } }
参考