使用本地类型推断的程序是否适用于较低的Java版本?

Hor*_*sey 1 java type-inference java-10

Java 10引入了本地类型推理,这非常酷:

var list = new ArrayList<String>(); // Compiles fine
Run Code Online (Sandbox Code Playgroud)

但是,似乎人们不愿意在新版本发布的那一天(周,月,年)更新他们的Java版本.

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

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

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

感谢您的意见.

Hol*_*ger 5

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

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

也许,会出现另一种编译器,允许灵活地使用具有较旧目标版本的较新源版本.正如开头所说,javac从未这样做过.