2017-09-04 64 views
1

給定字符串池對於給定的一段代碼的工作方式爲什麼最好創建一個單獨的文件來存儲常量?爲什麼要使用單獨的字符串常量文件?

String str = "test"; 

假設字符串「測試」在整個應用程序中使用了50次以上。爲什麼建議將其存儲在常量文件中。現在,字符串池的工作方式實際上應該只創建一個對象(如果它不存在於池中),然後在需要時將此對象的引用共享到其他位置。那麼爲什麼要創建一個單獨的常量文件來存儲常量?

+0

因爲以後可以更容易地更改它,也許? – 2017-09-04 16:44:28

回答

3

最重要的是國際化,有一個字符串文件意味着你有幾個地方你必須搜索可翻譯的文本。

請考慮一下這樣的情況,當您的應用程序變成命中並且它在開發它的語言環境之外發貨時,使用統一的字符串文件,您只需對文件內容進行簡單轉換,而使用其他方法您必須搜索每個文件並在應用程序幾乎不可用於不同區域的人員之前替換每個實例。

一個很好的例子是android的資源系統字符串。如果您將字符串保存在特定文件中,則可以更輕鬆地管理和翻譯它們。

+0

我認爲減少到I18N並不是真正的驅動力。這方面存在,但也有其他原因。 – GhostCat

0

因爲一切都有自己的位置,並有一切的地方。如果它是一個常量字符串,希望永遠不會改變,並且它在應用程序範圍內使用,那麼爲了維護和代碼可讀性問題,應該分別定義它(和類似的東西)。

0

簡單:因爲代碼重複是萬惡之源。

長遠來看,常量不如關於維護應用程序的性能。只要某些「財產」在不同的地方使用相同的含義 - 您想要確保所有用法都基於相同的定義。所以當需要更新時,只需要修改一行代碼。而不是50,因爲錯過更新一個或另一個事件的機會越來越大。

0

由於簡單的原因,您需要爲這些文字(不僅僅是文件等)存儲一些內容:如果您需要更改此文字的值,那麼您只能在一個位置更改它。由於這個原因存在2個主要的解決方案:

  1. 使用常數等級與public static final Object CONSTANT字段。
  2. 使用外部存儲器(例如,文件)

第一種情況有2個問題:首先,如果你改變了這個值,則需要重新編譯項目。其次,如果某些框架使用了這些變量,則需要直接在代碼中傳遞此參數。另外,當你需要支持國際化的時候,你可能會遇到管理正確變體的問題。

但是,當你使用外部存儲時,只有你需要的是實現你的存儲解析器(我的意思是json,xml,db等)。一些框架已經實現了這個功能,所以你不需要做這個工作。

儘管如此,你一定不要這樣做,但這只是一個非常好的做法。你

1

以下優點

  • 代碼重複是整個項目避免。定義的字符串在整個項目中保持不變,並且可以在多個位置重複使用
  • 如果用戶想要在代碼庫中修改字符串值,他/她必須只更改文件中的一個位置。
  • 字符串不會混亂你的項目代碼,讓它清晰易維護
  • 如果你想支持其他語言的本地化/ i18支持,那麼它將非常有用。將字符串放在資源文件中使得爲不同語言的每個字符串提供單獨的翻譯變得更加容易。
0

這是因爲如果有人想在將來對此字符串進行更改,那麼您無需在整個項目中搜索它。只需更改常量文件

相關問題