如何延长静态方法,实现接口枚举?(How to extend static methods for

2019-10-19 09:10发布

这个问题密切相关, 我刚才的问题上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 ),但我很好奇别人怎样在类似的情况下作出决定。 我也问过,希望有人在那里有比那些在我的脑海更好的想法这个问题。

Answer 1:

你不能覆盖的静态方法。 子类可以命名一个静态方法相同超类的,但是super是一个非静态操作。 你可以让它们执行两种不同功能的多个方法,但它们需要不同的名字。



文章来源: How to extend static methods for enums implementing an interface?