2009-04-23 77 views
15

java.lang.System类定义了若干well-known properties为什么Java没有知名系统属性名称的常量?

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

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

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

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

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

+2

我所做的是为自己创造条件。大概需要30秒左右。 my.package.SystemProperties并在那里添加常量。然后让我的IDE从那里帮助我。 – OscarRyz 2009-04-23 01:12:52

+2

>我所做的是把我自己的箱子(原文如此)装箱。 你没有任何错别字? :-)这正好说明了为什么Sun应该这样做,而不是让每个开发人员都离开。人是人,犯错误。 – 2009-04-23 02:00:40

+0

不,0个错别字。我复制粘贴他们,只添加我使用的那些值(通常只有4左右):-) – OscarRyz 2009-04-23 02:26:54

回答

9

System.getProperties()下记录的所有属性都是标准化的 - 每个Java SE实现都必须提供它们。 Java 7没有理由不能为这些标准属性名称引入常量。这并不妨碍引入新的房地产。我认为这只是没有人认为它值得付出努力(甚至对核心Java API的微小增加也必须经历我认为的过程)。

9

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

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

+1

+1绝对是。 – OscarRyz 2009-04-23 00:48:11

-5

"literal"LITERAL有什么区别?

两个字符:""

"literal"也适用时,看不出为什么会发明复杂的LITERAL s。

1

为了完整起见,阿帕奇公地郎有SystemUtils类,它提供公用常数和预定义的方法。

这种情况已经存在几年了,而且你已经在使用commons lang(2或3)。

SystemUtils.getUserHome(); 
SystemUtils.getJavaIoTmpDir(); 
SystemUtils.JAVA_IO_TMPDIR; 
SystemUtils.USER_HOME; 
相关问题