JavaSE:Java8 新特性 - 函数式接口
1. Java8的概述
Java8是Java语言的一个重要版本,该版本于2014年3月发布,是自Java5以来最具革命性的版本,
这个版本包含语言、编译器、库、工具和JVM等方面的十多个新特性
2. 函数式接口
<1>函数式接口:指,只包含一个抽象方法的接口,如:java.lang.Runnable、java.util.Comparator接口等
<2>Java8提供@FunctionalInterface注解,来定义(强调)函数式接口。
若定义的接口不符合函数式规范,便会报错。
<3>Java8中,增加了java.util.function包,该包包含了常用的函数式接口,具体如下:
接口名称 | 方法声明 | 功能介绍 |
Consumer | void accept(T t) | 根据指定的参数,执行操作 |
Supplier | T get() | 得到一个返回值 |
Function<T,R> | R apply(T t) | 根据指定的参数,执行操作并返回 |
Predicate | boolean test(T t) | 判断指定的参数,是否满足条件 |
3. 匿名内部类实现函数式接口
测试类
3 import java.util.Comparator; 4 import java.util.function.Consumer; 5 import java.util.function.Function; 6 import java.util.function.Predicate; 7 import java.util.function.Supplier; 8 9 public class FunctionalInterfaceTest { 10 11 public static void main(String[] args) { 12 13 // 1.匿名内部类的语法格式: 父类/接口类型 引用变量名 = new 父类/接口类型(){ 方法的重写 }; 14 Runnable runnable = new Runnable() { 15 @Override 16 public void run() { 17 System.out.println("我是既没有参数又没有返回值的方法!"); 18 } 19 }; 20 runnable.run(); // 我是既没有参数又没有返回值的方法! 21 26 27 System.out.println("----------------------------------------------------------------------"); 28 Consumer consumer = new Consumer() { 29 @Override 30 public void accept(Object o) { 31 System.out.println(o + "有参但没有返回值的方法就是我!"); 32 } 33 }; 34 consumer.accept("友情提示:"); // 友情提示:有参但没有返回值的方法就是我! 41 42 System.out.println("----------------------------------------------------------------------"); 43 Supplier supplier = new Supplier() { 44 @Override 45 public Object get() { 46 return "无参有返回值!"; 47 } 48 }; 49 System.out.println(supplier.get()); // 无参有返回值 50 55 System.out.println("----------------------------------------------------------------------"); 56 Function function = new Function() { 57 @Override 58 public Object apply(Object o) { 59 return o; 60 } 61 }; 62 System.out.println(function.apply("有参有返回值的方法")); // 有参有返回值的方法 63 67 68 System.out.println("----------------------------------------------------------------------"); 69 Comparator comparator = new Comparator() { 70 @Override 71 public int compare(Object o1, Object o2) { 72 return 0; 73 } 74 }; 75 System.out.println(comparator.compare(10, 20)); // 0 (传两个参数,得到一个返回值的方法) 76 80 System.out.println("----------------------------------------------------------------------"); 81 Predicate predicate = new Predicate() { 82 @Override 83 public boolean test(Object o) { 84 return false; 85 } 86 }; 87 System.out.println(predicate.test("hello")); // false (传一个参数,得到 true/false 的方法) 91 } 92 }