如何为实现接口的枚举扩展静态方法



这个问题与我之前关于SO的关于使用枚举接口的问题密切相关。本质上,我有一堆密切相关的枚举,它们都实现了一个公共接口。

接口称为Sections,枚举称为SectionASectionB等。我还有其他类,它们有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
}
}

我在枚举SectionASectionB等中也有自己的静态方法。(这是因为这些枚举都有一个单独的java.util.regex.Pattern字段,而我的静态方法是基于模式匹配的valueOf(String)方法的推广。)

所以,我的问题是:

如何保留对这些枚举的静态方法的访问权限,同时在接口级别进行泛化

我对其他设计决策持开放态度(事实上,我目前正在摆脱整个enum的想法,创建实现Sections并扩展抽象类AbstractSection的类),但我很好奇其他人在类似情况下是如何做出决策的。我问这个问题是希望有人能比我脑子里的想法更好。

不能重写静态方法。子类可以将静态方法命名为与超类相同的方法,但是super是非静态运算符。您可以有多个方法来执行两个不同的函数,但它们需要不同的名称。

最新更新