【发布时间】:2020-04-21 13:40:57
【问题描述】:
this link 讨论了版本号。那里或我发现的其他任何地方都没有解释这些看起来很宏观的东西是什么。例如,在什么情况下使用“$VNUM”?它的范围是什么?它是否在 openJDK 编译期间使用的 C++ 头文件中定义?它可以从我的 java 程序中访问吗?它是某种环境变量吗?
感谢您的任何解释。
【问题讨论】:
标签: java macros version versioning
this link 讨论了版本号。那里或我发现的其他任何地方都没有解释这些看起来很宏观的东西是什么。例如,在什么情况下使用“$VNUM”?它的范围是什么?它是否在 openJDK 编译期间使用的 C++ 头文件中定义?它可以从我的 java 程序中访问吗?它是某种环境变量吗?
感谢您的任何解释。
【问题讨论】:
标签: java macros version versioning
$ 后跟名称是在 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().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);
}
【讨论】: