抢鲜设置 JDK8 的编程环境,印象

和 JDK7 还没有热和,却开始关注 JDK8 起来了,JDK8 已进行到了 M8 开发预览版了,其中包含了一个千呼万唤的功能,即 Lambda 闭包的支持。在当前有对闭包特性的诉求,而 Java 本身不提供时,我们不得不转而求助于 JVM 上的其他的语言, 像 Scala, Groovy, JRuby 等。

不得不说 Scala 给我们带来了不少的快感,以致于想以更多的精力投入到 Scala 编程中去,不过还正在换取项目实践的机会。JDK8 引入 Lambda 后同样也是能更好的解决多核计算的问题,从程序员的角度来看,只要觉得 Lambda 能给我们带来无与伦比的灵活与便利性就足够了,水很深。

JDK8 还有增加的功能就是 JEP(JDK Enhancement-Proposal) 中的了。

来这里 http://openjdk.java.net/projects/jdk8/ 看看 JDK8 的里程碑

2012/04/26     M1     
2012/06/14     M2     
2012/08/02     M3     
2012/09/13     M4     
2012/11/29     M5     
2013/01/31     M6     
2013/06/13     M7     Feature Complete
2013/09/05     M8     Developer Preview
2014/01/23     M9     Final Release Candidate
2014/03/18     GA     General Availability

JDK8 语言上的几大特性有:

  1. Lambda 表达式 (俗称 闭包,或匿名方法)
  2. 方法引用(引入了像 C++ 的 :: 操作符)
  3. 更精悍的类型推断(可由方法上下文和调用链上对返回值类型进行推断,JDK7 在推断类型和异常时已有些长进)
  4. 接口中可以有默认的静态实现(就不怕二义性了?不要怕颠覆)

我们现在来搭建 JDK8 开发平台,只见识一下 Java 的 Lambda,于此让大家看出,这就是 JDK8。有以下几个要点:

下载、安装 JDK8 开发预览版

可以到 http://jdk8.java.net/download.html 来下载 JDK8 的开发预览版本,选择你适合的平台。安装后,按需设置好 JAVA_HOME,PATH 环境变量,这个不细说。

然后是 IDE 的支持,有了 JDK8 的 javac, java 两工具,你要在控制台加文本编辑器中来体验当然是可以的,但如此,这般你无法得到像 IDE 那样智能的提示,能促使你去触类旁通,进而了出个所以然来。像 list.forEach(x -> System.out.print(x)); 这一写法实质就是:

关键在 Consumer 类上,我们对 list.forEach(x -> System.out.print(x)); 代码生成的类用 javap -c 去反编译也可以看到 Consumer 的实现。我剔除了其中的注释代码

还有不少类在 java.util.function 包中,如 Function, Predicate, Supplier, 及带类型的 DoubleFunction, IntConsumer, LongPredicate, IntSupplier, IntUnaryOperator 等这样的类,一看到 @FunctionalInterface 及 function 这样的包样,我们立马就领略到已进入到了函数式编程的领域。

本人不认为编程界真正的高手用记事本写程序,何苦又何必呢? 君子善假于物也,非性也。

当前能够支持 JDK8 的 IDE 有三款,也就是流行的 IDE 都对 JDK8 紧紧的跟进了。

Netbeans 8 Nightly Builds 版,从这里 http://bits.netbeans.org/dev/nightly/latest/ 下载,能有多新就下多新的吧。然后可能(比如有多个 JDK 而未把 JDK8设置为 JAVA_HOME 时)要对 Netbeans 指定 JDK8,办法参考: http://stackoverflow.com/questions/6950960/how-to-point-netbeans-to-new-jdk

2013.10.16 更新刚发布的 NetBeans IDE 7.4 正式版已经支持了 JDK8 ,不需要使用 Nightly Build 版了。

举个例子,在我的 Mac OS X 环境中,编辑 netbeans.conf 文件

sudo vi /Applications/NetBeans/NetBeans Dev 201309130002.app/Contents/Resources/NetBeans/etc/netbeans.conf

其中加上这个

#这是我机器上的 JDK8 的 HOME 目录, 酌情而定
netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home"

或者你也可以建立了 Java 项目后逐层加上 JAVA8

Netbeans_Select_JDK8

项目属性/Libraries/Manage Platforms.../Add Platform.../选择 Platform 目录。

现在可以在  Netbeans 中写 Java 闭包了

Netbeans_Run_Closure

IntelliJ IDEA 12,无论你下载 30 天试用的 Ultimate Edition,还是 Community Edition,都支持 JDK8 的。IDEA 确实是很强大,可是太贵了,若非公司来推,我还是不冒这个险,社区版还是随意的。

在创建项目时设置 Project SDK,或是在项目的上下文菜单中,进入模块设定,再来到项目设置中,选择 JDK8,下拉中没有则 New 一个,指定到 JDK8 的 Home 目录

IDEA_Select_JDK8

最后,要支持 Lambda,把 Project language level 设置为  8.0 - Lambdas, type annotations etc.

来看看 Lambda 是怎么深发展的

IDEA_JDK8_Lambda

这里唱主角的是 java.util.stream.Stream, 它的方法可以让你真真正正做 Scala 里那些 map 操作了,譬如集合中所有属性值组成新的集合,拣出符合条件的记录,映射转换。有了它从此 Apache Commons CollectionUtils 就只能作壁上观了,束之高阁还嫌占了位。

非官方的代号为 Luna 的 Eclipse 4.4

下载位置:http://downloads.efxclipse.org/eclipse-java8/写本文时最新的是 2013-09-13 编译版,Linux, Mac, Windows 版还尽有。设置中 JDK 编译级别可以选到 1.8 (BETA)。

Eclipse_JDK8_Interface

这个可更好逆天了,接口都能用方法体了,于是乎实现多个接口又回归到从前的多重实现的继承了。其实这也是为 Lambda 的作的一个铺垫。

更多关于 Lambda 的内容可以看 http://openjdk.java.net/projects/lambda/

目前在 Youtube 上已经有不少介绍 JDK8 的视频了,GA 版的发布时间是 2014/03/18,还有不少时间去慢慢熟悉它,仍然用最顺手的 Eclipse 去体验。


Java8 准时在 2014/03/18  发布了,同时 NetBeans 8IntelliJ IDEA 13 对 Java8 有了强有力的支持。IntelliJ IDEA 可以下载免费的  Community Edition。然后  Eclipse Luna 的步伐显得有点慢了,它还处在 BETA 版中, 正式版应该也快了; 也可为 Eclipse 4.3 Kepler SR2 打上这个补丁 P20140317-1600 来支持 Java8。

Eclipse Luna 的  Milestones  是

M6 2014-03-07 4.4M6 (API Freeze)
M7 2014-05-02 4.4M7 (Feature Freeze)
目标是在 2014 年 6 月晚些时候完成

类别: Java/JEE. 标签: . 阅读(3,637). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar