欢迎来到天天文库
浏览记录
ID:30768750
大小:180.65 KB
页数:18页
时间:2019-01-03
《java8指南-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Java8指南-编程开发技术Java8指南译文出处:Autumn原文出处:BenjaminWinterberg2014年3月16F1Javaisst订1notdead一andpeoplearestartingtofigurethatout・”欢迎阅读我对Java8的介绍。本指南将一步步地通过所有的新的语言特性来引导你认识Java8。在简短的示例代码的帮助下,你将会学习到如何使用默认的接口方法、1ambda表达式、方法引用以及可重复的注解。在文章的最后,你将会熟悉最新的API变化,例如:streams>函数式接口、map扩展以及新的DateAPlo没有过多的文本一仅仅是一些
2、具有注释的代码片段。一起享受吧!接口的默认方法Java8使我们能够使用dcfault关键字给接口增加非抽象的方法实现。这个特性也被叫做扩展方法(ExtensionMethods)。如下例所示:interfaceFormula{doublecalculate(inta);defauItdoublesqrt(inta){returnMath,sqrt(a);除了抽象方法calculate,接口Formula同样定义了默认的方法sqrto具体类只需要实现抽象方法calculateo默认的方法sqrt可以在其未实现时“开箱即用”。Formulaformula=newFormula
3、(){©Overridepublicdoublecalculate(inta){returnsqrt(a*100);}};formula,calculate(100);//100.0formula,sqrt(16);//4.0formula被创建的像一个匿名对彖。代码看起来很啰嗦:对一个简单的sqrt(a*100)计算需6行。正如我们在下一节将要看到的,对只有单方法的类的实现,在Java8中有个更佳的方式。Lambda表达式我们先来讲一个简单的例了:在J3V3Z丽的版本中是如何排序一个字符吊list的:Listnames=Arrays.asList(〃peter〃,"ar
4、rna",〃mike〃,〃xenia〃);Collections・sort(names,newComparator(){©Overridepublicintcompare(Stringa,Stringb){returnb.compareTo(a);}});静态方法Collections,sort接受一个list和比较方法来对给定的list元素排序。你总是会发现你需要创建匿名的比较方法并且传递给排序方法。不同于整天创建匿名对象,Java8有一个简短的多的语法:lambda表达式:Collections.sort(names,(Stringa,Stringb)->{retur
5、nb.compareTo(a);});正如你所见,代码更短也更易于阅读,而且它还可以更短:Collections.sort(names,(Stringa,Stringb)->b.compareTo(a));对于一行的方法体,你可以省略{}和return关键字,而且它还可以更短:Collections.sort(names,(a,b)->b.compareTo(a));Java编译器知道参数类型,所以你也可以省略它们。下而让我们一同深入探究Klambda表达式是如何被更广泛地使用的。函数式接口lambda表达式是如何符合Java类型系统的?每个lambda对应于一个给定的类
6、型,用一个接口来说明。而这个被称为函数式接口(functional讪亿廿恥小的接口必须仅仅包含一个抽象方法声明。每个那个类型的lambda表达式都将会被匹配到这个抽象方法上。因此默认的方法并不是抽彖的,你可以给你的函数式接口自由地增加默认的方法。我们可以使用任意的接口作为lambda表达式,只要这个接口只包含一个抽象方法。为了保证你的接口满足需求,你需要增加©FunctionalInterface注解。编译器知道这个注解,一旦你试图给这个接口增加第二个抽彖方法声明时,它将抛出一个编译器错误。例如:©FunctionalInterfaceinterfaceConverter
7、{Tconvert(Ffrom);}Converterconverter=(from)->Integer.valueOf(from);Integerconverted=converter,convert(,,123,/);System,out.printin(converted);//123请记住如果©FunctionalInterface这个注解被遗漏,此代码依然冇效。方法和构造器引用通过使用静态方法引用,如上的示例代码可以被进一步的简化:Converter
此文档下载收益归作者所有