【发布时间】: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 因为我正在解析的字符串不等于枚举类型名称,尤其是其中包含空格甚至特殊字符的名称,我想将名称映射封装在枚举本身中。跨度>