2009-04-23 69 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; 
相關問題