预计于今年秋天将最终发布的 Java 平台最新更新意义重大且倍受期待。虽然尚未通过 Java Community Process (JCP) 正式创建 Java 7 平台 Java Specification Request (JSR),并且最终特性集仍然未知,但 Oracle 推出的 Early Access 下载以及 Oracle 团队的公开声明为我们理解 Java SE 7 的内容提供了一些帮助。
预计特性分为以下四类:
非 Java 语言支持
“易于开发” 更新
模块化支持
可伸缩性更新
非 Java 语言支持和 JSR 292
Java 7 将提供一些增强,可允许动态类型语言的编译器实现程序更加轻松地为 Java 运行时生成实现,并允许这些实现以更高的性能运行。JSR 292 是变化的推动力。它引入了新的字节码和一系列新的 Java 类。
大多数情况下,Java 语言是强类型的,这需要指定在方法中传递或返回的参数类型。但是,在字节级,Java 则更加偏向于弱类型:操作数栈中的变量仅在属于相关原始类型或者一般为对象引用时才需要指定类型。在几乎所有情况中,字节级都使用弱类型。方法调用是一种例外情况,它会强制使用强类型 — 也就是说,调用方法时将使用它的完整签名,这包括参数和返回类型。在这种情况下,需要使用已知 Java 类型对 Java 方法进行调用。这会对动态语言造成问题,比如 Ruby、Python 和 Groovy,因为它们是动态类型(类型仅在运行时为可知)。
可以采用一些机制(通常基于反射或使用生成的调用程序)来避免这些问题并允许在 JVM 上运行动态语言,但它们会受到显著的性能影响。JSR 292 的引入旨在通过添加新 Java 字节码 invokedynamic 以调用动态方法,并结合 Java 语言关联机制来处理允许在运行时重写方法结构,来解决这些问题。
“易于开发” 特性
与 Java 平台之前的发行版相同,许多新语言特性将帮助简化常用结构所需的语法。
Project Coin
Project Coin 涵盖众多小变化(coins),旨在降低编写简单任务的复杂度,并改善生成代码的可读性。
switch 语句中的 String
在 Java 7 之前的发行版中,您无法在 switch 语句中使用 String 或 Object。这意味着对 String 执行 switch 式语句的唯一方法是使用一系列 if-then-else 语句或者将 String 转换为原始类型或 enum 类型。String 在 switch 语句中的使用意味着以下简单结构现在已经合法:
switch (myString) {
case "one": <do something>; break;
case "red": <do something else>; break;
Default: <do something generic>;
}
改善泛型实例创建的类型推断
Java 5 引入了泛型,这使它能够对实例化过程中对一般集合类应用参数化类型,从而实现编译时安全检查。但是,在实现中,类型参数会有不必要的重复,例如:
Map<String, List<String>> anagrams = new HashMap<String,
List<String>>();
改进后的类型设置更改允许推断第二个 <> 结构:
Map<String, List<String>> anagrams = new HashMap<();