代码之家  ›  专栏  ›  技术社区  ›  Andrew Swan

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

  •  15
  • Andrew Swan  · 技术社区  · 15 年前

    这个 java.lang.system系统 类定义了 well-known properties .

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

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

    我不明白的是为什么这些属性没有被定义为常量(例如在java.lang.system类中)。这将比使用文字字符串少很多错误。换句话说,我希望能够做到:

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

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

    5 回复  |  直到 7 年前
        1
  •  9
  •   Lachlan    15 年前

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

        2
  •  9
  •   lothar    15 年前

    我猜Sun不想提交到一组预先定义的系统属性中。如果它们没有被定义为容器,那么它们可以随时添加系统属性(即使它们只发布JDK的增量版本,如从1.4.1到1.4.2)。

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

        4
  •  1
  •   beat Chinnery    7 年前

    为了完整性,ApacheCommonsLang具有 SystemUtils 提供公共常量和预定义方法的类。

    这一点已经存在了好几年,而且很有可能你已经在使用通用语言(2或3)。

    SystemUtils.getUserHome();
    SystemUtils.getJavaIoTmpDir();
    SystemUtils.JAVA_IO_TMPDIR;
    SystemUtils.USER_HOME;
    
        5
  •  -5
  •   S.Lott    15 年前

    A和A的区别是什么? "literal" 和A LITERAL ?

    两个特点: " .

    不明白为什么要发明一套复杂的 字面意义的 当什么时候 “文字” 也可以。