这都不需要JVM级别的改动,多值返回和有点类似的object destructing都属于语法层面的特性,可以简单的认为是syntactic sugar。在java中支持这些并不难,但java并不是什么特性流行就会去支持什么。
目前的Java Language Architect叫Brian Goetz,他在youtube上有一个视频,介绍未来java的发展方向,其中细致的讨论了他是如何决定是否将一个特性加入java中的。他谈及的一个很重要的理念是:
他并不会因为某个特性可以让java代码看起来简短而将其加入java,比如当年呼声很高的var关键字。代码的verbosity并不是他认为最为重要的考量,最重要的是代码的clarity。Java的代码需要能够清晰的表达程序员想表达的意义,这样才能够最有助于大规模的软件协作。
有意思的是实际上var关键字在Java 10中却被引入了。Brian Goetz专门花时间去澄清了背后的原因:虽然他不认为var导致的“简短”有多么重要的意义,但由于没有var关键字,很多时候他发现程序员会反而为了刻意的追求代码的简短,而把本应写成多行的语句写到同一行里面。这种语句虽然看似短了一些(很多时候短了不少),但却非常影响代码的可读性。而var关键字的引入可以鼓励程序员不要追求这种小聪明,该声明变量就声明变量,该写两行就不要写一行,那么程序整体的可读性就会提升,而这个是他认为Java在语言设计上应当追求的东西。
同理,不是java无法或者很难支持多值返回,只是目前这一特性的重要程度并不突出。实际上其他基于jvm的语言,比如kotlin,完全是支持多值返回和destructing的。