Java 8新特性前瞻

发表于:2014-6-03 09:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:LittlePanpc    来源:51Testing软件测试网采编

#
java
分享:
  快端午小长假了,要上线的项目差不多完结了,终于有时间可以坐下来写篇博客了。
  这是篇对我看到的java 8新特性的一些总结,也是自己学习过程的总结。
  几乎可以说java 8是目前为止,自2004年java 5发布以来的java世界中最大的事件了。它带来了java语言层面上的诸多改变,主要包括下面一些方面:语法、编译器、库、工具和运行时。
  一,语法层面:
  1,Lambda表达式。
  lambda表达式是一种可调用对象,它允许我们将函数作为函数参数传入。诸如C++、Groovy、Scala都已经支持lambda表达式。lambda表达式的设计已经花费了许多时间和社区努力,它已经有了比较简洁和紧凑的结构。它最简单的形式如下:
  1 Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );
  在这段代码里面,它只包含了变量e和函数体以及箭头运算符。e是ArrayList里面的String类型参数,被编译器调用,通过forEach循环来获取,并通过—>来调用函数体,将变量e打印出来。该段代码的lambda完整格式如下:
  1 Arrays.asList( "a", "b", "d" ).forEach( e -> {
  2     System.out.print( e );
  3     System.out.print( e );
  4 } );
  同时,lambda表达式也可以引用其它变量,但是该变量应该显式地声明为final,如下:
  1 final String separator = ",";
  2 Arrays.asList( "a", "b", "d" ).forEach(
  3     ( String e ) -> System.out.print( e + separator ) );
  还有一个lambda表达式的例子,是list进行排序的,也借以表达lambda表达式可以有返回值的特性:
  1 Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> {
  2     int result = e1.compareTo( e2 );
  3     return result;
  4 } );
  其实要是只是对list进行排序的话,上段代码可以简写成这样:
  1 Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> e1.compareTo( e2 ) );
  java的设计原本就参考了C++的诸多特性,lambda表达式也是源于对C++的模仿,但java 8中的lambda相对于C++中的而言,已经简化了很多,完整的C++的lambda表达式包括捕获列表、参数列表、箭头表达式、函数体以及尾置返回类型。有一个例子如下:
  1 int size_t=100;
  2 [size_t](const string src1, const string src1)—>{src1.size()<src2.size()};
  2,Java的设计者们想了大量办法以使业已存在的功能支持lambda表达式,功能函数的概念便是其中之一。
  函数接口(Functional Interface)是只含有一个方法的接口,我们经常使用的Runnable和Callable接口(这两个接口在多线程的环境下经常使用,两者最明显的区别就是Runnable无返回值,我们无法获取该线程的运算状态,而Callable则具有返回值,可以返回线程的运算结果。)便是最具代表性的例子。但是这两个接口是非常脆弱的,因为当开发人员往接口的定义里面再次添加方法声明时,已有实现该方法的类将不能够再运行。通过使用java注解@FunctionalInterface将使得接口具备这种能力,代码示例如下:
  1 @FunctionalInterface
  2 public interface Functional {
  3     void method();
  4 }
  在java 8中已经使接口Runnable和Callable接口添加了该注解。与此同时,java 8中提供的default和static方法不会对@FunctionalInterface接口产生影响。
41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号