openJDK版本号-这些是宏吗?:$ MAJOR。$ MINOR。$ SECURITY。如何访问这些?

问题描述 投票:0回答:1

this link,有版本号的讨论。那里或我在其他任何地方都没有关于这些宏观事物的解释。例如,在什么情况下使用“ $ VNUM”?它的范围是什么?它是在openJDK编译期间使用的C ++头文件中定义的吗?它可以从我的Java程序中访问吗?这是某种环境变量吗?

谢谢您的解释。

java macros version versioning
1个回答
0
投票

$后跟名称是在Unix Shell脚本和命令行提示符中使用变量的标准方法。您链接到的JEP实际上不是在指Unix命令,而是在使用该语法指示如何排列某些值。

如果您现在在Linux或OS X中打开终端,则可以输入以下内容以查看变量替换的工作原理:

MAJOR=11
MINOR=0
SECURITY=3
echo $MAJOR.$MINOR.$SECURITY

[作者本来可以使用Java语法来描述它,例如major + "." + minor + "." + security,或者可以用类似于BNF的符号来描述它,但是选择了这种方式。

版本元素由Runtime.Version类的实例使用。您可以使用Runtime.version()方法获取当前正在运行的JVM的实例。

您为什么要看它?解决特定版本中的已知错误,或在可用时使用较新的API。

如果要获得JEP描述为$VNUM的值,则应编写:

String vnum = Runtime.version().stream().map(Object::toString).collect(
    Collectors.joining("."));

…将主要/次要/安全号码(实际上不再称为)连接在一起,中间有一个句点。

但是,通常您不需要该字符串。您更有可能比较版本,以测试特定的错误或功能:

Runtime.Version requiredVersion = Runtime.Version.parse("11");

if (Runtime.version().compareTo(requiredVersion) < 0) {
    System.err.println("This program requires Java 11 or later.");
    System.exit(1);
}
© www.soinside.com 2019 - 2024. All rights reserved.