java 接口函数,函数式接口的特点
00-1010一、功能界面是什么?二。功能接口的特点。默认关键词四。JDK V .自定义比较器排序中的函数接口示例
00-1010所谓的函数接口,其实就是只有一个抽象方法在里面的接口。我们在上一节中使用的比较器接口是一个典型的函数接口,只有一个抽象方法compare。
只有一个抽象方法?上图中的equals方法不是没有函数体吗?不急,跟我一起往下看!
00-1010接口只有一个抽象方法,比如上图中的抽象方法compare。
允许定义静态非抽象方法。
允许定义默认的非抽象方法(默认方法只在java8中可用,见下文)
允许java.lang.Object中的public方法,比如上图中的equals方法。
接口注释不是必需的。如果一个接口符合 FunctionInterface 的定义,那么是否添加注释并不重要。添加这个注释可以让编译器检查得更好。如果没有编写函数接口,但是添加了@FunctionInterface,编译器会报错。
甚至可以说,函数接口是专门为lambda表达式准备的,lambda表达式是匿名实现类,只实现接口中唯一的抽象方法。
顺便说一下,默认关键字是00-1010,在java8之前
接口不能用方法实现,所有方法都是抽象的。
要实现接口,必须实现接口中的所有方法。
这就导致了一个问题:当一个接口有很多实现类的时候,修改这个接口就成了一件非常麻烦的事情,这个接口的所有实现类都需要修改。
这个问题困扰java工程师很久了,但是在java8中已经解决了,这是默认的方法。
默认方法可以有自己的默认实现,也就是说,它有一个方法体。接口类可能不实现默认方法,而可能使用默认方法。
目录
java.lang.Runnable,
java.util.Comparator
java.util.concurrent.Callable
java.util.function包下的接口,比如消费者、谓词、供应商等。
00-1010我们定制一个分类器来实现比较函数(函数接口比较器的唯一抽象方法)。0表示元素相等,-1表示前一个元素小于下一个元素,1表示前一个元素大于下一个元素。这个规则和java 8之前没什么区别。
以下代码以自定义接口实现类的方式实现:按年龄逆序排序!
employees . sort(new comparator Employee(){ @ Override public int compare(Employee em1,Employee em2){ if(em1 . getage()==em2 . getage()){ return 0;} return em1 . getage()-em2 . getage()0?-1:1;}});employees . foreach(system . out :3360 println);最终的打印结果如下,按照年龄的自定义规则排序。
雇员(id=8,年龄=79,性别=M,名字=Alex,姓氏=Gussin)雇员(id=7,年龄=68,性别=F,名字=Melissa,姓氏=Roy)雇员(id=10,年龄=45,性别=M,名字=Naveen,姓氏=Jain)雇员(id=3,年龄=43,性别=M,名字=Ricky,姓氏=Martin)雇员(id=4,年龄=26,性别=M,名字=Jon,姓氏左边的箭头是参数,右边是函数体。参数类型和返回值根据上下文自动判断。如下所示:
employees.sort((em1,em2)-{ if(em1 . getage()==em2 . getage()){ return 0;} return em1 . getage()-em2 . getage()0?-1:1;});employees . foreach(system . out :3360 println);以上是java理论基础函数接口特性分析的详细内容。关于java理论基础函数接口的更多信息,请关注热门IT的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。