JDK8 函数式接口
JDK8中为了适应函数式响应编程模式,引入了函数式接口概念以增加Lambda表达式的功能。函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口(Single Abstract Method)。定义了这种类型的接口,使得以其为参数的方法,可以在调用时,使用一个lambda表达式作为参数。从另一个方面说,一旦我们调用某方法,可以传入lambda表达式作为参数,则这个方法的参数类型,必定是一个函数式的接口,这个类型必定会使用@FunctionalInterface进行修饰。
从SAM原则上讲,这个接口中,只能有一个函数需要被实现,但是也可以有如下例外:
1. 默认方法与静态方法并不影响函数式接口的契约,可以任意使用,即
函数式接口中可以有静态方法,一个或者多个静态方法不会影响SAM接口成为函数式接口,并且静态方法可以提供方法实现
可以由 default 修饰的默认方法方法,这个关键字是Java8中新增的,为的目的就是使得某一些接口,原则上只有一个方法被实现,但是由于历史原因,不得不加入一些方法来兼容整个JDK中的API,所以就需要使用default关键字来定义这样的方法
2. 可以有 Object 中覆盖的方法,也就是 equals,toString,hashcode等方法。
JDK中以前所有的函数式接口都已经使用 @FunctionalInterface 定义,可以通过查看JDK源码来确认,以下附JDK 8之前已有的函数式接口:
java.lang.Runnable
java.util.concurrent.Callable
java.security.PrivilegedAction
java.util.Comparator
java.io.FileFilter
java.nio.file.PathMatcher
java.lang.reflect.InvocationHandler
java.beans.PropertyChangeListener
java.awt.event.ActionListener
javax.swing.event.ChangeListener
https://www.cnblogs.com/ownraul/p/5551545.html
http://blog.csdn.net/zjq_1314520/article/details/73556167
JDK8中新增的主要函数式接口如下:
public void testCoreInter(){
/**
* @name 消费型接口
* @use Consumer<T>
* @param T 传入参数
* @fun 接受一个参数 无返回值
* */
Consumer<String> con=(str)->System.out.println(str);
con.accept("我是消费型接口!");/**
* @name 供给型接口
* @use Supplier<R>
* @param R 返回值类型
* @fun 无参数 有返回值
* */
Supplier<Date> supp=()-> new Date();
Date date=supp.get();
System.out.println("当前时间:"+date);/**
* @name 函数型接口
* @use Function<T,R>
* @param T 传入参数
* @return R 返回值类型
* @fun 接受一个参数 有返回值
* */
Function<String, String> fun=(str)->"hello,"+str;
String str=fun.apply("张俊强");
System.out.println(str);
/**
* @name 断定型接口
* @use Predicate<T>
* @param T 传入参数
* @return Boolean 返回一个Boolean型值
* @fun 接受一个参数 返回Boolean型值
* */
Predicate<Integer> pre=(num)->num>0;
Boolean flag=pre.test(10);
System.out.println(flag);
}
相关文章
- 9.6接口和抽象类
- 接口测试常用工具及测试方法(零基础篇)
- C# 【中级篇】IComparable接口的使用
- Python接口自动化测试实战-----附资料
- 如何基于YAML设计接口自动化测试框架?看完秒会
- 定制并发类(七)实现ThreadFactory接口生成自定义的线程给Fork/Join框架
- 使用JWT生成Token进行接口鉴权实现方法
- ES6新特性:let,解构赋值,模板字面量,箭头函数,reat参数,扩展运算符,symbol,迭代器,promise,Set,Map。新接口:assign()
- PHP 使用 curl_* 系列函数和 curl_multi_* 系列函数进行多接口调用时的性能对比
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [4] 首页 APP 接口开发方案 ③ 定时读取缓存方式
- 详解JAVA8函数式接口{全}
- 微信小程序 功能函数 支付接口
- Java Lambda 表达式,Java Lambda 函数接口
- 抽象类、接口、枚举、类
- 浅析Java8新特性-四大内置核心函数式接口 :消费型Consumer(void accept)、供给型Supplier(T get)、函数型Funciton(R apply)、断言型Predicate(boolean test)
- Spring boot实现定时任务三:实现SchedulingConfigurer接口(动态定时任务)
- USB或将被取代:英特尔将Thunderbolt接口集成进CPU
- 在微信小程序上做一个「博客园年度总结」:解决前端获取接口数据太慢的一种思路