1

Java 10 引入了本地类型推断,这真的很酷:

var list = new ArrayList<String>(); // Compiles fine

然而,似乎人们不愿意在新版本发布的那一天(周、月、年)更新他们的 Java 版本。

List.of(1, 2, 3)这意味着如果要支持大多数使用旧 Java 版本的用户,我需要等到 Java 8 的 EOL 才能使用。

另一方面,本地类型推断可能会在编译为字节码时被推断出来,因此使用它的程序可能会在较旧的 Java 版本(9 或 8)上运行。另一方面,Java 似乎喜欢在运行时进行优化,这可能意味着类型推断需要 JRE 10 版。

有没有人试过这个?使用类型推断的程序是否可以在较旧的 Java 版本上运行

感谢您的意见。

4

1 回答 1

5

类型推断不会更改字节码,因此原则上,编译后的代码使用var将与旧版 JVM 兼容。
但是,与往常一样,javac不允许您将该-source选项与比该-target选项更高的发行版本结合使用。

因此,在源代码中使用旧版本运行的唯一方法var是为 Java 10 编译它,然后将编译的类向下移植到早期版本。最简单的方法就是更改类文件版本。我刚刚验证了一个简单的测试用例var在减少类版本号后在 Java 9 上有效。但是,当然,更复杂的向下移植工具应该验证没有其他代码功能或更新平台功能的 API 引用漏掉。

也许,会出现一个替代编译器,允许灵活地使用较新的源版本和较旧的目标版本。正如开头所说,javac从来没有这样做过。

于 2018-03-26T15:28:08.387 回答