java - 如何扩展实现接口(interface)的枚举的静态方法?

标签 java interface static enums

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

该接口(interface)名为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) 方法的泛化。)

所以,我的问题是这样的:

如何保留对这些枚举的静态方法的访问,同时在接口(interface)级别实现它们的泛化?

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

最佳答案

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

关于java - 如何扩展实现接口(interface)的枚举的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789191/

相关文章:

java - 如何在内部类中访问servlet的方法变量

java - DOM Level 3 未针对 XmlObject 实现

java - 返回接口(interface)类型对象的方法

java - 为什么非静态内部类不能有静态成员(字段和方法)?

java - 如何使用 Java 从网站获取数据?

java - 为什么接口(interface)优先于抽象类?

c# - 为什么在 C# 接口(interface)名称前加上 “I”

c# - 静态抽象类

c++ - 使用静态数据的构造函数在 main() 之前执行工作

java - 使用 spring-data-cassandra 从 Cassandra DB 保存/加载时的前/后处理对象