java8 functionalinterface注解_【Java8】@FunctionalInterface
阅读目录
什么是函数式接口(Functional Interface)
函数式接口用途
关于@FunctionalInterface注解
函数式接口里允许定义默认方法
函数式接口里允许定义静态方法
函数式接口里允许定义java.lang.Object里的public方法
JDK中的函数式接口举例
参考资料
什么是函数式接口(Functional Interface)
其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法。
这种类型的接口也称为SAM接口,即Single Abstract Method interfaces。
函数式接口用途
它们主要用在Lambda表达式和方法引用(实际上也可认为是Lambda表达式)上。
如定义了一个函数式接口如下:
@FunctionalInterface
interface GreetingService
{
void sayMessage(String message);
}
那么就可以使用Lambda表达式来表示该接口的一个实现(注:JAVA 8 之前一般是用匿名类实现的):
GreetingService greetService1 = message -> System.out.println("Hello " + message);
关于@FunctionalInterface注解
Java 8为函数式接口引入了一个新注解@FunctionalInterface,主要用于编译级错误检查,加上该注解,当你写的接口不符合函数式接口定义的时候,编译器会报错。
正确例子,没有报错:
@FunctionalInterface
interface GreetingService
{
void sayMessage(String message);
}
错误例子,接口中包含了两个抽象方法,违反了函数式接口的定义,Eclipse报错提示其不是函数式接口。
提醒:加不加@FunctionalInterface对于接口是不是函数式接口没有影响,该注解知识提醒编译器去检查该接口是否仅包含一个抽象方法
函数式接口里允许定义默认方法
函数式接口里是可以包含默认方法,因为默认方法不是抽象方法,其有一个默认实现,所以是符合函数式接口的定义的;
如下代码不会报错:
@FunctionalInterface
interface GreetingService
{
void sayMessage(String message);
default void doSomeMoreWork1()
{
// Method body
}
default void doSomeMoreWork2()
{
// Method body
}
}
函数式接口里允许定义静态方法
函数式接口里是可以包含静态方法,因为静态方法不能是抽象方法,是一个已经实现了的方法,所以是符合函数式接口的定义的;
如下代码不会报错:
@FunctionalInterface
interface GreetingService
{
void sayMessage(String message);
static void printHello(){
System.out.println("Hello");
}
}
函数式接口里允许定义java.lang.Object里的public方法
函数式接口里是可以包含Object里的public方法,这些方法对于函数式接口来说,不被当成是抽象方法(虽然它们是抽象方法);因为任何一个函数式接口的实现,默认都继承了Object类,包含了来自java.lang.Object里对这些抽象方法的实现;
如下代码不会报错:
@FunctionalInterface
interface GreetingService
{
void sayMessage(String message);
@Override
boolean equals(Object obj);
}
JDK中的函数式接口举例
java.lang.Runnable,
java.awt.event.ActionListener,
java.util.Comparator,
java.util.concurrent.Callable
java.util.function包下的接口,如Consumer、Predicate、Supplier等
java8 functionalinterface注解_【Java8】@FunctionalInterface相关推荐
- java8 functionalinterface注解_@FunctionalInterface注解的使用
被@FunctionalInterface注解标记的类型表明这是一个函数接口.从概念上讲,函数接口只有一个抽象方法.如果接口声明的抽象方法覆写Object类的公共方法,那这方法不算作接口的抽象方法,因 ...
- java8 optional使用_[Java8]如何正确使用Optional
Optional是Java8提供的为了解决null安全问题的一个API.善用Optional可以使我们代码中很多繁琐.丑陋的设计变得十分优雅.这篇文章是建立在你对Optional的用法有一定了解的基础 ...
- java注解 interface_java @FunctionalInterface注解详解
下面要给大家介绍的就java @FunctionalInterface注解,对于@FunctionalInterface注解不大了解的人,可以通过下面的文章来了解一下哦. 在学习Lambda表达式的时 ...
- java8 lambda 视频_一文搞懂Java8 Lambda表达式(附带视频教程)
Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...
- java8新特性_乐字节-Java8新特性-函数式接口
上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...
- 1.6 @FunctionalInterface注解
在学习 Lambda 表达式时,我们提到如果接口中只有一个抽象方法(可以包含多个默认方法或多个 static 方法),那么该接口就是函数式接口.@FunctionalInterface 就是用来指定某 ...
- Java @FunctionalInterface注解
@FunctionalInterface 就是用来指定某个接口必须是函数式接口,所以 @FunInterface 只能修饰接口,不能修饰其它程序元素. 函数式接口就是为 Java 8 的 Lambda ...
- Java8 重复注解与类型注解
Java8 重复注解与类型注解 定义重复注解 @Repeatable(RepeatAnnotations.class) 类型注解 @Target(ElementType.PARAMETER) /*** ...
- 基于Spring Boot应用@FunctionalInterface注解
记录:291 场景:为了理解和应用@FunctionalInterface注解.@FunctionalInterface是Java语言规范定义函数式接口的注解.它作用在只有一个抽象方法的接口.默认方法 ...
最新文章
- C 语言中的 feof()函数
- android layout 对齐,安卓利用TableLayout实现控件列对齐
- 计算机组成原理码质变换,计算机组成原理负数的8421码
- 穿越剧_张宇鑫:穿越剧——从皇帝到乞丐
- Nginx 作为 WebSockets 代理
- 需要自己调研的框架,以及需要学习的内容
- nacos dataid修改配置文件_nacos 配置中心自动化运维之namespace坑
- 成功将本地文件添加到github仓库
- .Net中俩种使用不定参数的方法
- ASP.NET应用开发心得
- 指定版本_小米五一购机福利,购买Redmi7指定版本,送小米活塞耳机
- Tableau过期处理方法
- 高速PCB设计规范(二)
- java String字符串去除()里的内容
- 三星s8文档有html,三星s8有哪些特殊功能 这些绝对能让你羡慕
- Vscode中报错 CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
- 1997-2020年31省进出口总额
- 崩坏35.4版本什么时候更新
- h5微信页面在手机微信端和微信web开发者工具中都能正常显示,但是在pc端微信浏览器上打不开(显示空白)...
- Git的4 个阶段的撤销更改(通俗易懂)
热门文章
- CentOS 8.2 搭建私有云 NextCloud
- Oracle恶意代码(300天删除SYS.TAB$表)清除过程记录
- API 和 SDK 的区别
- AD定义pcb外形为异形
- mt6757介绍,mt6757原理图
- 通过百度普通IP定位API获取IP的地理位置java根据ip定位地理位置
- [IE技巧] IE8 网页兼容问题报告工具
- cdoj915-方老师的分身 II (长度不小于k的最短路)【spfa】
- Jina AI x 矩池云 |神经搜索引擎,一键构建
- 计算机程序设计基础结课报告,《计算机程序设计基础》课程地位及教学探讨