为什么 Java 没有已知系统属性名称的常量?[已关闭]

2022-09-03 14:22:24

java.lang.System 类定义了许多众所周知的属性

例如,您可以通过查找“java.io.tmpdir”属性来获取JVM的临时目录:

... = System.getProperty("java.io.tmpdir");

我不明白的是,为什么这些属性没有被定义为常量(例如,在java.lang.System类中)。这比使用文字字符串更不容易出错。换句话说,我希望能够做到这一点:

... = System.getProperty(System.JAVA_IO_TMPDIR);

任何想法为什么没有这样做?它甚至可以添加到Java的未来版本中,而不会破坏向后兼容性。还是我错过了一些明显的东西?


答案 1

System.getProperties() 下记录的所有属性都是标准化的 - 每个 Java SE 实现都必须提供它们。Java 7 没有理由不能为这些标准属性名称引入常量。它不会阻止引入新属性。我认为没有人认为它值得付出努力(即使是对核心Java API的微不足道的添加也必须经历一些过程)。


答案 2

我的猜测是,Sun 不想提交到一组预定义的系统属性。如果它们未被定义为 contant,则可以随时添加系统属性(即使它们仅发布 JDK 的增量版本,如从 1.4.1 到 1.4.2)。

编辑:
任何预定义的常量都必须被视为 API 的一部分。因此,即使更改常量的数量也是 API 更改。通过不定义任何常量,Sun 可以定义新的系统属性,而无需引入 API 更改。