【问题标题】:Interface a static method for Enum为 Enum 接口一个静态方法
【发布时间】:2012-08-20 10:26:01
【问题描述】:

Enum.valueOf() 不能被具体 Enum 类型的另一个静态方法 valueOf 隐藏,但由于我使用文本文件的反射创建对象,我需要一种通用方法来调用 valueOf

目前我的Enum 有一个静态类fromString()

public enum Fruits {

   APPLE, ORANGE, ...;

    public static Fruit fromString(String fruit) {
        ...
    }
}

但是我如何接口这样的方法,当我处理枚举字段类型时,我会调用适当的方法?我唯一能想到的是:

  • 使用标记界面
  • 为每个枚举实现这个静态方法
  • 通过反射调用静态方法

是否有其他替代方案可以强制执行此限制?

【问题讨论】:

  • 出于好奇,您为什么不使用内置的 .valueOf 方法?每个枚举类都有这两种形式。一个需要类和名称的,应该称为 Enum.valueOf(clazz, name)。另一个属于单独的枚举类,应该称为 Fruits.valueOf(name)。您将免费获得它,而您的 fromString 实现将复制该功能。
  • @Matt 因为我正在解析的字符串不等于枚举类型名称,尤其是其中包含空格甚至特殊字符的名称,我想将名称映射封装在枚举本身中。跨度>

标签: java interface enums


【解决方案1】:

如果我理解正确,您将拥有许多想要通过独特的 fromString 方法集成的不同枚举。我所做的是创建一个单独的类,将所有枚举成员累积到单个static final Map 中,并根据它实现fromString 方法。

在我的例子中,所有枚举都实现了一个通用接口,因为我需要调用许多自定义方法,而与所讨论的确切枚举无关。

【讨论】:

    【解决方案2】:

    当然,它是内置的:使用Enum#valueOf(Class<T> enumType, String name)

    【讨论】:

      猜你喜欢
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多