`
JerryWang_SAP
  • 浏览: 1030584 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

用代码判断当前系统是否支持某个版本的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的原创文章,请关注公众号"汪子熙":

 
0
0
分享到:
评论

相关推荐

    Apex-Feature:Apex 的要素类

    例如,开发人员可以调用一个静态方法来确认当前用户是否有权访问某个特定的 Lightning 组件,或者判断是否可以在 Salesforce1 移动应用中执行特定的操作。 在进行测试时,Apex 要素类可以作为测试类的一部分,帮助...

    Android 开发常用代码片段

    4. **isConnectedOrConnecting():** 判断当前网络是否已连接或正在连接过程中。 #### 七、检测某个Intent是否有效 **知识点概述:** 在发送Intent之前,最好先判断该Intent是否有效,避免因无效Intent导致的异常...

    重构_改善既有代码的设计

    4. **移动特征(Move Feature)**:将某个类中的方法或者属性移到另一个类中,以实现更好的职责分配。 5. **内联方法(Inline Method)**:当一个方法只有一两行代码时,可以考虑将其直接嵌入调用它的位置。 6. **...

    js代码-访问端判断JS

    例如,有些功能在旧版IE浏览器中可能不支持,因此需要检测`navigator.appVersion`或使用`feature detection`库(如Modernizr)来确保兼容性。 总的来说,通过JS进行访问端判断是Web开发中的基础技能,它可以帮助...

    决策树java代码实现.docx

    2. **allSameLabel**: 判断当前样本集中所有的标签是否一致。 3. **getMostCommonLabel**: 获取样本集中最常见的标签。 4. **groupByFeature**: 将数据集按照某个特征进行分组。 以上介绍了一个简化版的决策树分类...

    IE的有条件注释判定IE版本详解(附实例代码)

    现在,开发者更倾向于使用Feature Detection(特性检测)和Modernizr等工具来检测浏览器支持的功能,而不是特定的浏览器版本。此外,使用响应式设计和CSS3可以更好地实现跨浏览器兼容性,避免依赖于浏览器特定的解决...

    ARCGIS 开发集锦 地理信息系统的二次开发

    ### ARCGIS 开发集锦:地理信息系统二次开发的关键知识点 #### 一、ArcEngine工具条添加图层要素 在ARCGIS的二次开发中,一个常见的需求是通过ArcEngine的工具条添加图层要素。这涉及到如何在现有的地图界面上增加...

    JS可拖动QQ在线客服代码

    5. **浏览器兼容性**:考虑到IE、Chrome、Safari等主流浏览器的差异,开发时需要使用跨浏览器的JS代码,例如使用`feature detection`(特性检测)来判断浏览器支持的功能,并根据结果适配不同的实现方式。...

    JQUERY1.6 使用方法四 检测浏览器

    - 应优先考虑使用feature detection的方法,它通过检查浏览器是否支持某个特性来决定执行特定代码,更加灵活和可靠。 以上是对文件提供的标题和部分内容中的知识点进行的详细解释,涵盖了浏览器检测的原理、方法...

    grub4dos-V0.4.6a-2017-02-04更新

    受内存限制,当前大字库可支持到 32*32,中文小字库可支持到 40*40. 2.不再支持 vga 图形模式。 2015-07-07(yaya) 1.支持每像素16位彩色模式(64K 5:6:5)。 2.支持 jpg(jpeg,jpe)图像格式。 3.在 vbe ...

    _goodFeatureToTracK

    2. **特征匹配**: 使用光流法在后续帧中寻找当前特征点的最佳匹配点。 3. **跟踪更新**: 更新特征点的位置,并根据需要添加或删除特征点。 4. **重复步骤2-3**: 对于每一帧都重复上述步骤,直到视频结束。 #### 四...

    关于内核动态补丁技术(kpatch)

    - **`_ALTERNATIVE_CFG` 宏**:这个宏用于配置具体的替换行为,比如是否启用某个特性等。它的定义如下: ```c #define _ALTERNATIVE_CFG(oldinstr, newinstr, feature, cfg, ...) \ __ALTERNATIVE_CFG(oldinstr, ...

    nodeissupported03.rar_Windows编程_Unix_Linux_

    3. **跨平台兼容性**:为了确保代码能在多种操作系统上工作,开发者需要了解如何检测当前环境,例如使用`process.platform`来判断操作系统类型,并据此采取不同的实现策略。`isSupported`方法可能就是这样的一个工具...

    安卓开发-手机摇一摇DEMO代码,实现摇一摇执行特定程序.zip.zip

    这个功能允许用户通过摇动手机来触发特定的操作或执行某个程序。在本例中,我们将深入探讨如何通过Android SDK实现这样的DEMO代码,以及在实际应用中可能涉及到的关键技术点。 首先,我们需要在`AndroidManifest....

    日期时间的js日历

    这涉及日期计算,比如计算两个日期之间的差值,或者判断某个日期是否在指定范围内。 8. **AJAX和本地存储**:更高级的日历功能可能会使用AJAX异步请求从服务器获取数据,如节假日信息,或者利用`localStorage`或`...

    R语言小波分析wavelet

    通过分析ECG信号中的特征,医生可以判断患者是否存在心脏疾病。小波分析在此类信号分析中表现出色,因为它能够捕捉到信号中瞬时变化的部分。 在上述示例中,我们利用R语言和`wavelets`包成功地对一组模拟的心电图...

    Mitab开源类库函数注释

    - **返回值**:一个整型数值,代表当前Mitab类库的版本号。 #### mitab_c_getlasterrorno() - **函数功能**:此函数用于获取最后一次操作时发生的错误代码。 - **返回值**:一个整型数值,代表最后一次错误的错误...

    echarts 全屏 功能

    1. 不同浏览器对全屏API的支持可能存在差异,因此需要使用条件判断来兼容不同的浏览器。 2. 全屏状态下,可能需要对图表样式进行调整,例如去除边框、调整字体大小等,以适应全屏显示。 3. 退出全屏时,要确保恢复...

Global site tag (gtag.js) - Google Analytics