欢迎来到天天文库
浏览记录
ID:6352653
大小:225.00 KB
页数:18页
时间:2018-01-11
《java中文简明教程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、欢迎阅读我编写的Java8介绍。本教程将带领你一步一步地认识这门语言的新特性。通过简单明了的代码示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和重复注解。看完这篇教程后,你还将对最新推出的API有一定的了解,例如:流控制,函数式接口,map扩展和新的时间日期API等等。允许在接口中有默认方法实现Java8允许我们使用default关键字,为接口声明添加非抽象的方法实现。这个特性又被称为扩展方法。下面是我们的第一个例子:?1234567interfaceFormula{
2、doublecalculate(inta); defaultdoublesqrt(inta){ returnMath.sqrt(a); }}在接口Formula中,除了抽象方法caculate以外,还定义了一个默认方法sqrt。Formula的实现类只需要实现抽象方法caculate就可以了。默认方法sqrt可以直接使用。?123456789Formulaformula= newFormula(){ @Override publicdoublecalcula
3、te(inta){ returnsqrt(a* 100); }}; formula.calculate(100); //100.0formula.sqrt(16); //4.0formula对象以匿名对象的形式实现了Formula接口。代码很啰嗦:用了6行代码才实现了一个简单的计算功能:a*100开平方根。我们在下一节会看到,Java8还有一种更加优美的方法,能够实现包含单个函数的对象。回到顶部Lambda表达式让我们从最简单的例子开始,来学习如何对
4、一个string列表进行排序。我们首先使用Java8之前的方法来实现:?12345678Listnames=Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, newComparator(){ @Override publicintcompare(Stringa,Stringb){ returnb.compareTo(a); }});静态工具
5、方法Collections.sort接受一个list,和一个Comparator接口作为输入参数,Comparator的实现类可以对输入的list中的元素进行比较。通常情况下,你可以直接用创建匿名Comparator对象,并把它作为参数传递给sort方法。除了创建匿名对象以外,Java8还提供了一种更简洁的方式,Lambda表达式。?123Collections.sort(names,(Stringa,Stringb)->{ returnb.compareTo(a);});你可以看到,这段代
6、码就比之前的更加简短和易读。但是,它还可以更加简短:?1Collections.sort(names,(Stringa,Stringb)->b.compareTo(a));只要一行代码,包含了方法体。你甚至可以连大括号对{}和return关键字都省略不要。不过这还不是最短的写法:?1Collections.sort(names,(a,b)->b.compareTo(a));Java编译器能够自动识别参数的类型,所以你就可以省略掉类型不写。让我们再深入地研究一下lambda表达式的威力吧。回到顶部函
7、数式接口Lambda表达式如何匹配Java的类型系统?每一个lambda都能够通过一个特定的接口,与一个给定的类型进行匹配。一个所谓的函数式接口必须要有且仅有一个抽象方法声明。每个与之对应的lambda表达式必须要与抽象方法的声明相匹配。由于默认方法不是抽象的,因此你可以在你的函数式接口里任意添加默认方法。任意只包含一个抽象方法的接口,我们都可以用来做成lambda表达式。为了让你定义的接口满足要求,你应当在接口前加上@FunctionalInterface标注。编译器会注意到这个标注,如果你的接
8、口中定义了第二个抽象方法的话,编译器会抛出异常。举例:?12345678@FunctionalInterfaceinterfaceConverter{ Tconvert(Ffrom);} Converterconverter=(from)->Integer.valueOf(from);Integerconverted=converter.convert("123");System.out.println(converted);
此文档下载收益归作者所有