这个问题与我之前关于SO的关于使用枚举接口的问题密切相关。本质上,我有一堆密切相关的枚举,它们都实现了一个公共接口。
接口称为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
的类),但我很好奇其他人在类似情况下是如何做出决策的。我问这个问题是希望有人能比我脑子里的想法更好。
不能重写静态方法。子类可以将静态方法命名为与超类相同的方法,但是super
是非静态运算符。您可以有多个方法来执行两个不同的函数,但它们需要不同的名称。