zoukankan      html  css  js  c++  java
  • 用代码判断当前系统是否支持某个版本的feature

    JDK9已经出来有一段时间了,因此很多流行的Java应用纷纷增添了对JDK9乃至JDK10的支持,比如Tomcat。

    我们通过这个链接下载最新的Tomcat源文件包,总共7MB:

    https://tomcat.apache.org/download-90.cgi

    解压之后,在文件夹apache-tomcat-9.0.10-srcjavaorgapachecatalinacore里找到文件JreMemoryLeakPreventionListener.java:

    可以看到大量调用工具类JreCompat检测JRE9是否可用:

    JreCompat.isJre9Available()

    查看isJre9Available的具体实现:

    
    public static boolean isJre9Available() {
    
         return jre9Available;
    
    }
    
    

    被一个boolean控制:jre9Available。

    
    jre9Available这个boolean被Jre9Compat.isSupported()控制:
    
    static {
    
      // This is Tomcat 9 with a minimum Java version of Java 8.
    
      // Look for the highest supported JVM first
    
      if (Jre9Compat.isSupported()) {
    
          instance = new Jre9Compat();
    
          jre9Available = true;
    
    } else {
    
         instance = new JreCompat();
    
         jre9Available = false;
    
      }
    
    }
    
    

    再看Jre9Compat.isSupported()的代码:

    
    static boolean isSupported() {
    
         return inaccessibleObjectExceptionClazz != null;
    
    }
    
    

    一旦inaccessibleObjectExceptionClazz不为null,说明JRE9可用。

    inaccessibleObjectExceptionClazz来自Class.forName("java.lang.reflect.InaccessibleObjectException"),

    java.lang.reflect.InaccessibleObjectException这个类正是Java 9引入的。因此如果用Class loader加载不到这个类,一定说明当前的运行环境是Java 9以下。

    通过这种方式进行Java运行环境的检测比System.getProperty准确,因为后者获取的信息理论上有可能被别人用setProperty覆盖。

    ABAP

    通过表CVERS查看Software component的版本信息:

    要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  • 相关阅读:
    java.lang.NoSuchMethodError:antlr.collections.AST.getLine() I
    T7 java Web day01 标签HTML
    T6 s1 day19
    T5 s5 Day18
    T5 s4 Day 17
    T5 s3 day16
    T5 s2 Day 15
    T5 s1 day14
    T4 S03 day 12
    T4 S01 day1
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/9821667.html
Copyright © 2011-2022 走看看