Java中的函数接口
作为一种面向对象的编程语言,Java不可能有独立的函数,因为除了一些原始数据类型和方法之外,所有的东西都围绕着类和对象。函数一直是类的一部分,只能使用对象或类来调用。
然而,随着Java8的发布,一个叫做函数接口的新概念以及其他一些功能如Lambda表达式、时间API、流API等被发布。
但是,这些函数接口是什么,你如何定义它们?让我们来了解一下!什么是接口?
接口作为一种抽象机制,规定了一个类的行为。它也被称为一个包含抽象方法和静态常量的类的蓝图。一个接口可以包含一个或多个抽象方法,而不是方法主体。
简单地说,一个接口就像一个合同,每个实现类都必须遵守。比如说。
因此,如果实现该接口的类没有声明该接口的所有方法,代码将无法运行并抛出一个错误:error:A1isnotabstractanddoesnotoverrideanabstractmethodinA1。
在JDK8之前,接口不能定义实现,但现在可以为接口方法添加默认实现。我们还可以定义静态和默认方法,这些方法可以在没有接口中的对象的情况下被调用。
基本上,接口是用来实现代码中的多重继承和松散耦合的。
现在我们对接口有了清楚的了解,让我们看看什么是函数接口,以及它是如何工作的。什么是函数接口?
函数接口也被称为单一抽象方法(SAM)接口,因为它不能有多于一个抽象方法。
函数接口可以有多个静态和缺省方法,并有一个实现和一个额外的抽象方法。为了将一个接口标记为函数接口,FunctionalInterface注解被用来避免错误地声明额外的方法。
函数接口之所以如此受欢迎,是因为它为程序员提供了使用Lambda表达式来实例化接口的能力,而无需使用匿名和庞大的类实现。
此外,在函数接口中使用抽象关键字是可选的,因为定义在接口内的方法默认是抽象的。
但是,Lambda表达式是什么意思?
Lambda表达式是一种未命名的或匿名的方法,它不单独执行,而是用来实现函数接口的定义方法。它被定义为
使用的箭头运算符()被称为运算符。例如,如果我们有一个方法,如下所示。
使用Lambda表达式,它可以写成:
()1。61803
我们可以看到,Lambda函数中的方法没有任何参数,使得运算符的左边是空的。而右侧定义了动作,在本例中,它将返回GoldenRadio的值:1。61803。
在Java8之前,实现接口或创建内类对象是至关重要的,但随着Java8的引入,我们所能做的就是将Lambda表达式分配给功能接口。
功能接口实例
要创建功能接口,你可以使用FunctionalInterface注解或使用Java预定义的功能接口。
例子A:首先,我们将标记FunctionalInterface,并创建一个名为MyInterface的接口,其抽象方法名为getGoldenRationValue()。然后我们将创建一个名为main的公有类来执行这个方法。为了在功能接口中使用lambda表达式,我们将声明一个对MyInterfaceDemo的引用,然后将lambda表达式分配给该引用。最后,我们将使用引用接口打印出黄金分割率的值。ValueofGoldenRatio1。61803
例B:
在这个例子中,我们将使用一个预定义的函数接口ToDoubleFunction,它接收一个参数T并返回一个双倍数作为输出。ToDoubleFuntion包含一个抽象的方法,名为applyasDouble()。最后,我们将打印包括空格在内的信息长度。预定义函数接口列表
现在我们知道了如何定义函数接口,让我们看看有多少个预定义的功能接口。
主要有四种类型的功能接口,即Consumer、Predicate、Function和Supplier,人们可以在不同情况下实现它们。在这四个接口中,Consumer、Function和Predicate有额外的功能接口。
下面是Java中所有内置或预定义的接口的列表。
注意:下表中提到的T、U和R分别代表第一个参数、第二个参数和操作结果的类型。
Interface
Type
Runnable
BiConsumer(T,U)
T,U
BiFunction(T,U,R)
T,UR
BinaryOperator
T,TR
BiPredicateT,U
T,Uboolean
BooleanSupplier
boolean
Consumer
T
DoubleBinaryOperator
double,doubledouble
DoubleConsumer
double
DoubleFunction
doubleR
DoublePredicate
doubleboolean
DoubleSupplier
boolean
DoubleToIntFunction
doubleint
DoubleToLongFunction
doublelong
DoubleUnaryOperator
doubledouble
FunctionT,R
TR
IntBinaryOperator
intint
IntConsumer
int
IntFunction
intR
IntPredicate
intboolean
IntSupplier
int
IntToDoubleFunction
intdouble
IntToLongFunction
intlong
IntUnaryOperator
intint
LongBinaryOperator
long,longlong
LongConsumer
long
LongFunction
longR
LongPredicate
longboolean
LongSupplier
long
LongToDoubleFunction
longdouble
LongToIntFunction
longint
LongUnaryOperator
longlong
ObjDoubleConsumer
T,double
ObjIntConsumer
T,int
ObjLongConsumer
T,long
Predicate
Tboolean
Supplier
T
ToDoubleBiFunctionT,U
T,Udouble
ToDoubleFunction
Tdouble
ToIntBiFunctionT,U
T,Uint
ToIntFunction
Tint
ToLongBiFunctionT,U
T,Ulong
ToLongFunction
Tlong
UnaryOperator
TT总结
一个接口作为一种抽象机制。
函数接口可以有多个静态和默认的方法,并有一个实现和一个额外的抽象方法。
在函数接口内定义的方法默认是抽象的,因此,现在使用抽象关键字是可选的。
Lambda表达式是一个匿名的方法,它不会自己执行,而是用来实现函数接口的定义方法。
要创建函数接口,你可以使用FunctionalInterface注解或使用Java预定义的函数接口。
以上就是关于函数接口的全部内容,我们希望它能帮助你理解基础知识。请记住,我们只是触及了函数接口的表面,你还可以从Java中的每个预定义的函数接口中了解更多。
FFP最终会惩罚曼城吗?FFP到底在保护什么?2023年2月6日英超联盟发布公告声称曼城俱乐部自200910赛季以来多次违反英超财务公平规则目前对曼城的违规指控超过100项英超联盟启动的这次针对曼城的指控如果最终指控成立对……
相约来生在刚过去的这个奥密克戎肆虐神州大地的冬季,有多少老人没能迈过虎年之坎,多少家庭经历人生考验。生之喜悦,死之悲凄,皆会令人动容。姑父也没能熬过这个寒冬,永远安息于那片他曾热……
七彩云南古滇名城昆明向往的生活,是一种生活方式很少有有一座城市能够像昆明一样,能够得到各个年龄段的人都喜爱。有不少人听我去了昆明生活,就对我说对于昆明这座城市的感慨:别的地方都是活着,而昆明却是生活。对于昆明的热爱,从一开……
太突然!知名演员宣布结婚2月7日,因为韩剧《灿烂的遗产》《我的女友是九尾狐》《花游记》等拥有众多亚洲粉丝的韩国演员、歌手李昇基在个人社交平台发布手写信,官宣与女友李多寅结婚。手写信中李昇基提到要……
产业快评60天月活破亿,爆火的ChatGPT让人又爱又怕上线第一周,吸引100万人试用;两个月后的今天,月活人数直指1亿。。。。。。这令人望尘莫及的战绩,属于一款名为ChatGPT的新型聊天工具。一夜爆红的ChatGPT,什么……
2022附下载【新米行业研究报告数策全行业调研报告】专注于洞察全行业发展研究,关注我,带您前瞻各大行业未来趋势!下文为报告部分内容,完整报告请关注并私信添加客服下载趋势一:……
这些重大工程,照亮了上海科技产业的未来!2023年,上海市公布了2023年重大工程清单,计划安排正式项目191项。其中,科技产业类77项,社会民生类27项,生态文明建设类17项,城市基础设施类62项,城乡融合与乡村振……
临沂市兰山区兰山街道中心幼儿园(高尔夫园)三月读书分享会鲁网3月27日讯为了进一步促进教师的专业成长,构建良好的师幼互动关系,临沂市兰山区兰山街道中心幼儿园(高尔夫园)于3月24日举行了3月读书分享交流,本月共读的书目是《有力的师幼……
AI重构生产力下的电子行业投资机遇分析(报告出品方作者:长江证券,杨洋、钟智铧)ChatGPT:生成式AI引爆技术奇点AIGC全称为AIGeneratedContent,指基于生成对抗网络GAN、大型预训练模……
形成尿路结石的原因有哪些?尿路结石,又称泌尿系结石,是一种常见的泌尿系统疾病。在临床上可以引起肾绞痛、血尿、尿路感染等症状,给患者带来很大的不适。那么,形成尿路结石的原因有哪些?一起来看专家怎么说。……
越老越妖!保罗1分钟3破爵士联防,三次不同方式皆奏效文水清清北京时间3月28日,太阳半场战罢5752暂时领先爵士,克里斯保罗5分2篮板5助攻2抢断1封盖背后,更让人赞叹之处,面对爵士祭出的联防,他在最后一分钟里三次不同方式……
木里高山环抱的童话之地木里香格里拉湖。凉山日报全媒体记者买锐摄编者按:3月27日,四川文旅厅官网正式发布消息,根据《旅游景区质量等级的划分与评定》和《旅游景区质量等级管理办法》国家标准,经市(……