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

时间:2014-02-14 20:44:22

标签: java interface static enums

这个问题与my previous question on SO about using interface with enums密切相关。从本质上讲,我有一堆密切相关的枚举,它们都实现了一个通用的接口。

界面名为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),但我很好奇其他人如何在类似的情况下做出决定。我已经问了这个问题,希望那里的人比我脑子里的人有更好的想法。

1 个答案:

答案 0 :(得分:0)

您无法覆盖静态方法。 子类可以将静态方法命名为与超类的静态方法相同,但super是非静态运算符。 您可以使用多个方法执行两个不同的功能,但它们需要不同的名称。

相关问题