java8引入了lambda表达式。lambda表达式并不是新功能,只是为了方便代码编写的语法糖。
但,即便是在其他语言已经司空见惯的lambda表达式,如果在java中要支持它,还需要考虑各种向下兼容的问题。
简单的说,java的lambda表达式支持,大约需要考虑2个方面
对于第一点的回答是funtionalinterface的annotation,第二点的回答是default方法。
functionalinteface
通过在一个interface上增加@functionalinterface, 表示这个接口是特殊interface。其特殊性体现在
@functionalinterface public interface itest { void sayhello(string name); } public class testlambda { public static string name = "test"; public static void testrun2(itest test){ test.sayhello(name); } public static void main(string[] args) { testrun2(test->system.out.println(test)); } }
default方法
default方法只能在interface中声明。default方法使得interface也可以定义已经实现的方法。那么问题来了。interface为什么一定需要这个特性?java的interface不就是应该都只有抽象方法吗?
考虑一下这个例子
list<integer> alist = new arraylist<integer>(); alist.add(1); alist.add(2); alist.add(3); alist.add(4); alist.foreach((s)->system.out.println(s));
list是jdk java.util的一个接口。此接口由来已久。如果要在其中引入foreach方法,而且支持使用lambda表达式,必须对list进行一些改变。但是,jdk要向下兼容,一旦对已知的list增加接口,势必无法保证兼容性。所以,出于这个原因,想办法增加了default方法。这使得一个接口可以定义默认方法,以保全jdk原有的接口可以继续向下兼容。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问, 点击进行留言回复!!
SpringBoot引用阿里easyexcel,Excel导出返回浏览器下载
HashMap、Hashtable、ConcurrentHashMap三者间的异同
解决RecycleView 中Item包含Edittext时,滑动view复用导致数据错乱的问题
多线程、同步工作原理、死锁案例、Lock接口、线程的生命周期的讲解及实现
网友评论