是否可以使用javax.lang.model.SourceVersion来确定JRE版本?

时间:2014-04-14 13:25:35

标签: java

使用javax.lang.model.SourceVersion确定JRE版本是否可以?

如果是,哪一个是优先的?

int version = SourceVersion.latest().ordinal();
// or
int version = SourceVersion.latestSupported().ordinal();

奖金指向任何人解释SourceVersion#latest()和SourceVersion #UpeanSupported()可能有何不同。

PS。我知道Getting Java version at runtime

2 个答案:

答案 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()可以是以下任何一种:

  1. RELEASE_5
  2. RELEASE_6
  3. RELEASE_7
  4. RELEASE_8
  5. 基于jar / war中的 java.specification.version 。从技术上讲,这可以是用户定义的值,在开发api(可以分发给其他各种开发人员/应用程序)时非常有用。