Java 8 之后,还有哪些进化的功能?( 八 )

在这个例子中,变量初始化不需要跟try-with-resources的初始化部分写在一起。

不过需要注意的一个陷阱是,现在允许访问已经被try-with-resources释放的资源,绝大部分情况下这种访问都会失败:

下划线不再是有效的标识符

在Java 8中,如果使用下划线作为标识符,编译器就会发出警告。Java 9更进一步,禁止仅使用下划线作为标识符,将其留给未来的特殊语义使用。

改进的警告

最后,我们提一下新版Java中有关编译器警告的改进。

现在可以用@SafeVarargs给私有方法添加注释,来避免错误的Type safety: Potential heap pollution via varargs parameter警告。(实际上,这个改动是之前提到过的JEP 213: Milling Project Coin中的一部分)。

有关Varargs的更详细内容可以看这里(https://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs.html)。组合使用官方文档中提到的这些功能可能会造成泛型(https://docs.oracle.com/javase/8/docs/technotes/guides/language/generics.html)及其潜在问题(https://docs.oracle.com/javase/tutorial/java/generics/nonReifiableVarargsType.html)。

推荐阅读