2010-08-14 62 views
5

是否有任何Java(> 5)enum列出歐洲國家和語言的地方? 如果沒有,我可能會從這個列表中寫出:http://www.nationsonline.org/oneworld/european_languages.htm歐洲國家和語言是否有Java Enum?

但是如果我能夠避免這種負擔,那就太好了!

P.S .:最後,我開始在geonames.org上使用geoNames webservice。對於國家我用這個片段在Groovy:

import org.geonames.* 

ToponymSearchCriteria sc = new ToponymSearchCriteria() 
sc.setContinentCode("eu") 
sc.setFeatureCode("PCLI") 
def res = WebService.search(sc) 
def countries = res.getToponyms().collect{it.countryName}.sort() 
+0

爲什麼要枚舉50個對象?我認爲這不容易維護或使用。你能詳細說明你想要枚舉的原因嗎? – Asaf 2010-08-14 21:31:23

+3

該字段中的'Java Enum'將具有**太靜態**性質。 – 2010-08-14 21:39:44

+0

謝謝大家的洞察力......我想我會忘記使用枚舉的想法,將存儲國家和他們的語言作爲我的應用的域對象... – Philippe 2010-08-14 21:42:02

回答

14

這是不可能的專業框架的設計者將包括這樣的枚舉在他們的圖書館,因爲設置的國家(和設定政治上公認的官方語言之一)的變化每時每刻。你或者不得不打破向後兼容性,使得Enum對於應該工作超過幾年的軟件來說毫無用處,或者你必須在Enum中保留舊的,不再被認可的國家和語言。

+0

我同意這不應該在一個專業的框架。我只是想知道某個地方是否有他自己的圖書館中的某個人,只是爲了開始...... – Philippe 2010-08-14 21:31:42

+0

你錯過了觀點:枚舉應該是永遠的。國家改變。 – 2010-08-14 23:01:43

+2

什麼都不是,老兄。我們可以在這個太陽系中得到一個行星枚舉嗎?根據Joshua Bloch的說法,是的 - 他在他的書中被吹捧爲Java的最佳建議。據你們說,不,哦。 – irreputable 2010-08-14 23:39:41

1

至少我會自動生成該URL中的枚舉類。您可以解析HTML,獲取值並編寫一個定義枚舉的java文件。

只要此URL的內容發生變化,您就可以重新運行自動生成器並創建一個新的枚舉類。

但請注意 - 枚舉中的每個更改都有可能在其餘代碼中引入錯誤。

7

也許Locale.getISOCountries()Locale.getISOLanguages()會幫助你。

+0

嘿!他們如何應對這個世界上不斷變化的國家? – Philippe 2010-08-15 20:37:31

+0

java.util.Locale只會給你一個對java框架的依賴關係,當國家發生變化時,直到下一個java minor版本發佈時纔會得到更新。 – homaxto 2011-01-18 10:17:50

8

使用枚舉來存儲一些相當穩定的數據沒有任何錯誤。你還能做什麼,將它存儲在XML中?那有什麼更好的?所以你不必重新編譯(這是一個huuuge麻煩)?我們住在哪一年?

或將其存儲在數據庫中;當一個新的國家誕生時,我們只需要在數據庫中插入一行,並且巧妙編寫的應用程序將立即加載並使用它 - 而無需重新啓動應用程序!歡呼。

即使對於歐洲,這是如此的矯枉過正。我相信他們不會比我們重新部署我們的應用程序更頻繁地更換國家,而這些應用程序在任何現代公司中都至少每週發生一次。

沒什麼是永遠的,老兄。我們可以在這個太陽系中得到一個行星枚舉嗎?根據Joshua Bloch的說法,是的 - 他在他的書中被吹捧爲Java的最佳建議。據你們說,不,哦。那麼,至少我們只能發現新的行星,而且我們不能在任何可預見的將來破壞舊行星,所以行星枚舉可以兼容,對嗎?

告訴冥王星。

+1

感謝您的評論,我覺得在「不太完美的設計決策中可以完成這項工作」的世界中不那麼孤單:-) – Philippe 2010-08-15 20:28:07