是否存在可列出全部JVM参数名称的枚举类?
关于JVM参数名称枚举类的问题
JDK标准库中没有官方提供的枚举类(或类似结构)来枚举所有JVM参数名称,原因在于JVM参数(包括标准系统属性、JDK特定非标准属性、厂商私有参数)数量众多且会随JDK版本迭代增减,官方不会维护一个静态的、覆盖所有参数的枚举类。
不过你可以通过以下方式解决“避免硬编码参数字符串调用System.getProperty()”的需求:
1. 自定义枚举类(最贴合需求)
根据你项目中实际用到的JVM参数,自行创建枚举类来统一管理参数名称,示例如下:
public enum JvmPropertyName { SSL_KEY_STORE("javax.net.ssl.keyStore"), TLS_SERVER_PROTOCOLS("jdk.tls.server.protocols"), USER_DIR("user.dir"), JAVA_VERSION("java.version") // 按需添加更多参数 ; private final String name; JvmPropertyName(String name) { this.name = name; } public String getName() { return name; } // 封装获取参数值的方法,简化调用 public String getValue() { return System.getProperty(name); } }
使用时直接通过枚举调用,比如JvmPropertyName.SSL_KEY_STORE.getValue(),彻底避免硬编码字符串。
2. 借助第三方库的常量定义
部分第三方工具库会封装常用的系统/JVM属性名称为静态常量,比如:
- Apache Commons Lang的
SystemUtils类:包含JAVA_VERSION、USER_DIR等常用属性的常量定义 - Spring Framework的
SystemPropertyUtils类:也提供了部分系统属性的常量和解析工具
不过这类库仅覆盖常用参数,无法包含所有JVM参数,且不是枚举类型,但同样能减少硬编码。
3. 动态获取所有参数(按需使用)
如果需要遍历当前JVM的所有参数,可通过以下API动态获取:
- 获取所有系统属性:
System.getProperties() - 获取JVM启动参数:
ManagementFactory.getRuntimeMXBean().getInputArguments()
但这种方式是动态获取,无法实现静态枚举的编译期校验,适合需要批量处理参数的场景。
内容的提问来源于stack exchange,提问作者Stan
相关产品推荐
相关产品推荐

