函数式接口@FunctionalInterface使用示例
通过JDK8源码javadoc,可以知道@FunctionalInterface有以下特点:
该注解只能标记在"有且仅有一个抽象方法"的接口上,表示函数式接口。
JDK8接口中的静态方法和默认方法,都不算是抽象方法。
接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中的方法,那么也不算抽象方法。
该注解不是必须的,如果一个接口符合"函数式编程"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查,如果编写的不是函数式接口,但是加上了@FunctionalInterface 那么编译器会报错。
代码说明:使用Lambda表达式。一般的格式是 ()->{} ,如果{}里面只有一行代码,则{}可以省略。 (->左边的()表示方法体,如果有形参,则在()中添加形参,->右边{}表示具体逻辑。如果方法体返回值是void,则甚至可以在{}中不写任何逻辑(当然也要结合场景)。返回值如果有值,则需要写具体的逻辑,return处理后的值。)理解这里非常重要!!!!
演示一、请求参数、返回参数均有值的接口
package com.calvin.currency.function;
/**
* @Title CustomFuctionInterface
* @Description 自定义函数式接口之演示一、请求参数、返回参数均有值的接口
* @author calvin
* @date: 2020/3/3 1:02 AM
*/
@FunctionalInterface
public interface CustomFuctionInterface {
String printStr(String str1, String str2);
}
代码测试
@Test
public void test1() {
CustomFuctionInterface customFuctionInterface = (str1, str2) -> "hello " + str1 + str2;
String printStr = customFuctionInterface.printStr("A&", "B");
System.out.println("printStr = " + printStr);
}
控制台输出结果:
演示二、请求参数没有值、返回参数有值的接口
package com.calvin.currency.function;
/**
* @Title CustomFuctionInterface
* @Description 自定义函数式接口之演示二、请求参数没有值、返回参数有值的接口
* @author calvin
* @date: 2020/3/3 1:06 AM
*/
@FunctionalInterface
public interface CustomFuctionInterface2 {
String printStr();
}
代码测试
@Test
public void test2() {
CustomFuctionInterface2 customFuctionInterface2 = () -> "hello world";
String printStr = customFuctionInterface2.printStr();
System.out.println("printStr = " + printStr);
}
控制台输出结果:
演示三、实际项目中可借鉴使用(落地)
/**
* @Title CustomFuctionInterface
* @Description 自定义函数式接口之演示三、实际项目中可借鉴使用(落地)
* @author calvin
* @date: 2020/3/3 1:25 AM
*/
@FunctionalInterface
public interface CustomFuctionInterface3 {
void doSomething();
}
假设现在某个类的某个方法形参为CustomFuctionInterface3,如代码所示:
public static void execute(CustomFuctionInterface3 interface3) {
interface3.doSomething();
}
传统的调用方法 :
@Test
public void test3() {
execute(new CustomFuctionInterface3() {
@Override
public void doSomething() {
System.out.println("doSomething...");
}
});
}
控制台输出结果:
通过Lambda表达式改进以上测试代码:
@Test
public void test3() {
execute(() -> System.out.println("doSomething..."));
}
再次查看控制台输出结果:
可以发现结果是一致的,代码看起来更加简洁美观。
总结: 以上几个小案例,通过使用函数式接口@FunctionalInterface+Lambda表达式进行了代码演示,对于我们理解函数式编程的思想以及并发工具包JUC下的函数型、断定型、消费者、供给型等接口的源码阅读都有一定的帮助。
————————————————
版权声明:本文为CSDN博主「电商技术进阶」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/haogexiang9700/article/details/104623782
函数式接口@FunctionalInterface使用示例相关推荐
- JDK8新特性:函数式接口@FunctionalInterface的使用说明
我们常用的一些接口Callable.Runnable.Comparator等在JDK8中都添加了@FunctionalInterface注解. 通过JDK8源码javadoc,可以知道这个注解有以下特 ...
- Java之函数式接口(FunctionalInterface)
Java之函数式接口(FunctionalInterface) 1. FunctionalInterface是什么? FunctionalInterface 中文称之为 函数式接口.是Java新特性之 ...
- Java:Java 8 函数式接口FunctionalInterface
文档 https://www.runoob.com/java/java8-functional-interfaces.html 定义函数式接口 package com.github.mouday.de ...
- Jdk1.8新特性(二)——lambda表达式(参数列表)-{}和函数式接口@FunctionalInterface
Jdk1.8新增lambda表达式是为了简化代码,主要用于简化匿名实现类,为其提供一种更加简洁的写法.Lambda表达式在swift语言中被称为代码块,lambda表达式可以认为是一种特殊的接口,是匿 ...
- java函数式 new_java8简单入门--函数式接口 @FunctionalInterface
1.介绍 看了几篇关于 java8 入门的例子,其中引入了许多令人期待已久的特性(虽然我没有过这样的体会),但不管你的代码是普通青年款还是文艺青年款,你都可以从被 java8 的重新组织的代码看到她的 ...
- java8 interface_Java8新特性:函数式接口@FunctionalInterface使用说明
我们常用的一些接口Callable,Runnable,Comparator等在JDK8中都添加了@FunctionalInterface 注解: 通过JDK8 源码javadoc,可以知道@Funct ...
- JAVA8特性之函数式接口-@FunctionalInterface注解
函数式接口: 定义: 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,总体有点像匿名类 @FunctionalInterface: 该注解可加可不加,它是函数式接口语法检查注解的,当然最 ...
- java函数式接口@FunctionalInterface的详细解析
目录 前言 1. 函数式接口 2. @FunctionalInterface定义 3. 使用方法 前言 关于函数式接口都可以使用lambda表达式实现 具体涉及到lambda表达式可以看我之前的文章进 ...
- @FunctionalInterface函数式接口注解
@FunctionalInterface注解 作用于接口上.表明这个接口是一个特殊的接口即 :函数式接口 一般的接口可以有任意的抽象方法.但是函数式接口却规定了该接口只能有一个抽象的方法.正是由于这点 ...
最新文章
- C/C++使用keybd_event模拟键盘按键
- 学习Docker容器网络模型 - 搭建分布式Zookeeper集群
- 原生js实现preAll和nextAll方法
- C语言中的extern关键字用法
- ProfessionalDotNetNuke 第一章(摘录)
- ES5-11原型与原型链深入、对象继承
- 股票涨停之后该不该卖?
- python语言的变量特点随时_【Python】Python语言特点
- 0基础学java可行吗_上海0基础学JAVA可行吗?
- harmonyos鸿蒙,HarmonyOS鸿蒙入门篇
- oracle 无效的窗口句柄 print spooler服务已开,大师为你解决win10系统无法运行print spooler服务的恢复技巧...
- 人生性格分析02-60干支日
- 南京大学计算机 国家重点实验室,南京大学
- DJI Onboard-SDK-ROS-4.0.1 在妙算2-G上编译运行
- WPS批量根据标题设置目录编号问题与目录级别快速调整
- 邮箱传大文件怎样快_5款好用的企业邮箱推荐
- 读LockSupport源码
- 优矿-获取商品期权数据
- Linux中man手册的安装以及使用详解
- rpm包与deb包的制作过程