作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个界面...
public interface Feature
{
public abstract void doSmth();
}
...和实现该接口(interface)的多个枚举:
//第一个枚举
public enum FeatureA implements Feature
{
A1
{
@Override public void doSmth() { System.out.println("A ==== A1"); }
},
A2
{
@Override public void doSmth() { System.out.println("A ==== A2"); }
};
@Override public abstract void doSmth();
}
//第二个枚举
public enum FeatureB implements Feature
{
B1
{
@Override public void doSmth() { System.out.println("B ==== B1"); }
},
B2
{
@Override public void doSmth() { System.out.println("B ==== B2"); }
},
B3
{
@Override public void doSmth() { System.out.println("B ==== B3"); }
};
@Override public abstract void doSmth();
}
//和许多其他实现功能的枚举
现在假设我像这样组装一组对应于枚举常量名称的字符串(这对于第三方代码是必需的)...
Set<String> singleEnum = new LinkedHashSet<String>();
singleEnum.add("A2");
singleEnum.add("A1");
...稍后我需要将此类集合中的每个字符串转换为枚举常量,然后应用 doSmth() 方法。 singleEnum 仅包含 FeatureA 常量的名称,因此我可以在这种情况下应用 valueOf(String) 方法:
for (String s : singleEnum)
{
FeatureA.valueOf(s).doSmth();
}
但是如果集合中的字符串对应于不同的枚举常量呢?例如:
Set<String> multipleEnums = new LinkedHashSet<String>();
multipleEnums.add("A1");
multipleEnums.add("B2");
multipleEnums.add("A2");
我想做这样的事情:
for (String s : multipleEnums)
{
Feature./* convert s to the correct enum */.doSmth();
}
有没有简单的方法来做到这一点? Eclipse 允许应用于 Feature 的唯一方法是 Feature.class,我真的不知道如何从那里开始。我正在处理庞大的数据集,因此性能很重要。
谢谢。
最佳答案
您可以使用每个枚举的名称创建一个 Map
static final Map<String, Feature> map = ...
static <F extends Enum & Feature> void addEnums(F... features) {
for(F f: features)
map.put(f.name(), f);
}
addEnums(FeatureA.values());
addEnums(FeatureB.values());
关于java - 如何将 String 转换为正确的 Enum 常量(实现公共(public)接口(interface)的多个 Enum)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11914621/
我是一名优秀的程序员,十分优秀!