使用javax.lang.model.SourceVersion确定JRE版本是否可以?
如果是,哪一个是优先的?
int version = SourceVersion.latest().ordinal();
// or
int version = SourceVersion.latestSupported().ordinal();
奖金指向任何人解释SourceVersion#latest()和SourceVersion #UpeanSupported()可能有何不同。
答案 0 :(得分:1)
SourceVersion.latest()
返回可以建模的最新源版本。
SourceVersion.latestSupported()
返回当前执行环境完全支持的最新源版本。 {@code RELEASE_5}或更高版本
当我在java 7 sourceVersion srcCode
检查源代码时以下代码段解释了内部行为
public static SourceVersion latest() {
return RELEASE_7;
}
private static SourceVersion More ...getLatestSupported() {
try {
String specVersion = System.getProperty("java.specification.version");
if ("1.7".equals(specVersion))
return RELEASE_7;
else if ("1.6".equals(specVersion))
return RELEASE_6;
} catch (SecurityException se) {}
return RELEASE_5;
}
希望它澄清你的怀疑
答案 1 :(得分:1)
回答你的问题 -
当SourceVersion#latest()和SourceVersion #UpeanSupported()可能不同时。
您现在知道 latestSupported 来自系统属性 java.specification.version 。
例如,如果您在JAVA 8上运行应用程序,那么:
SourceVersion#latest()将是RELEASE_8
SourceVersion #UsingSupported()可以是以下任何一种:
基于jar / war中的 java.specification.version 。从技术上讲,这可以是用户定义的值,在开发api(可以分发给其他各种开发人员/应用程序)时非常有用。