2009-01-07 34 views
0

在我的java項目中,我有一堆字符串在messages.properties文件中進行了外化。在其各自的Messages.java文件中,我擁有相同數量的公共靜態String類型屬性,因此我可以訪問這些外部化文本。如何避免java項目上的不需要的日誌消息?

然後,我實現了一個名爲getString的方法,它接收常量的名稱作爲它的參數並返回想要的文本。這樣,就不需要在Messages.java文件中聲明所有公共靜態字符串類型的屬性。

但這樣做後我的日誌變得充滿了「NLS未使用的消息」消息。

您是否知道是否有辦法阻止這些警告消息被記錄?

在此先感謝。

回答

3

消息聽起來像是你寫的一個類,因爲我沒有看到它在我的JDK 6 javadoc中。

這聽起來像你試圖重新創建java.util.ResourceBundle。我建議使用它,並放棄你的班級。它將具有正確處理I18N的附加優勢。

我在硬編碼類中的公共靜態消息鍵中看不到任何值。這是你必須維護的另一件事。如果我明白你在做什麼,我會拋棄你的消息並改用ResourceBundle。

+0

作爲你的文章的補充,如果他現在有5000行的MyClass.AddLog(),也許他應該將ResourceBundle調用包裝在Messsages類的「AddLog」方法中。 – 2009-01-07 12:42:59

+0

我甚至沒有看到這方面的需求,但是我不確定我是否真的瞭解這裏的要求。 – duffymo 2009-01-07 12:47:23

5

您的Messages類 - 它聽起來像它延伸org.eclipse.osgi.util.NLS

如果是這樣的話,它的目的是填補了要求:

  • 提供編譯時檢查的消息存在。
  • ,以避免包含鍵和值的映射的內存使用情況(這是資源束方法中的情況)。
  • 好的i18n支持。

即NLS填充Message.staticVariable的值與在messages.properties中找到的staticVariable的值。

警告日誌記錄提供有關Messages.javamessages.properties文件之間不匹配的信息。

您的getString()方法聽起來像它沒有使用NLS的任何優點,所以正如其他人所建議的那樣,您最好使用ResourceBundle。

0

duffymo,作爲jamesh表示,Messages是我寫的一個類,它擴展了org.eclipse.osgi.util.NLS。它有一個私有的靜態屬性,它的類型是... ResourceBundle!

jamesh,感謝您詳細介紹NLS的工作方式。

根據你的回答,我從我的項目中刪除了我的Messages類,並在需要使用外部化字符串的類上添加了ResourceBundle類型的屬性。另外,我這樣做的方式是訪問外部字符串的行不需要改變。

我們項目中的文件數量已經減少,代碼保持如前所述的清潔狀態,並且沒有更多的日誌警告。

謝謝,夥計們。你搖滾。