此問題與my previous question on SO about using interface with enums密切相關。基本上,我有一堆密切相關的枚舉,並且它們都實現了一個通用接口。如何擴展實現接口的枚舉的靜態方法?
的接口稱爲Sections
和枚舉被稱爲SectionA
,SectionB
等我有有像List<Sections>
和Map<Sections, String>
領域其他類。現在,來填充這些領域,我想有機會獲得valueOf(String)
,即我想可以這樣說
Map<Sections, String> sectionsMap = new HashMap<Sections, String>();
for (String s : someStringList) {
try {
sectionsMap.put(Sections.valueOf(s), someOtherFunctionReturningString(s));
} catch (IllegalArgumentException e) {
e.printStackTrace(); // if s doesn't match any enum
}
}
我也有在枚舉SectionA
,SectionB
,等我自己的靜態方法(這是因爲這些枚舉都有一個java.util.regex.Pattern
場,和我的靜態方法是基於模式匹配的valueOf(String)
方法的推廣。)
所以,我的問題是這樣的:
我如何能留住訪問靜態這些枚舉的方法,同時也在界面層次上進行泛化?
我打開其他的設計決定(其實,我目前擺脫整個enum
想法和創造實現Sections
和擴展一個抽象類AbstractSection
類),但我很好奇別人怎樣使他們的類似情況下的決策。我問過這個問題,希望外面有人比我頭腦中有更好的想法。
接口枚舉似乎擊敗枚舉的目的,不是嗎? http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html。從Oracle文檔中,「枚舉類型是一種特殊的數據類型,它使變量成爲一組PREDEFINED CONSTANTS。」根據定義,接口不是常量。也許你真的不想要枚舉的實現接口,並應該重新訪問你的設計? – Matt
事情是,我的枚舉是(以某種方式)預定義的常量。究竟如何?這是我在上一個問題中提供的一個冗長的細節(這個問題的第一行鏈接到它)。 –
如果我理解正確,你想有一個方法,可以採取一個字符串,可能是你的枚舉之一(哪一個?)的一部分,並從適當的枚舉中返回一個值。它發現枚舉和值的方式部分基於正則表達式? –