【发布时间】:2022-01-14 15:43:33
【问题描述】:
我有几个实现接口Word 的枚举。我想生成这些枚举的所有值的列表。
我目前这样做的方式是:
public Set<Word> allWords() {
Set<Word> dictionary = new HashSet<>();
dictionary.addAll(Arrays.asList(Article.values()));
dictionary.addAll(Arrays.asList(Conjunction.values()));
dictionary.addAll(Arrays.asList(Verb.values()));
// And so on...
return dictionary;
}
有没有办法遍历这些枚举?我想这将涉及创建一个 Class 对象列表,但我不确定如何将其转换回实际值。
如果相关,Word 和每个枚举都在同一个包(词典)中。
【问题讨论】:
-
为什么要问如何迭代?您有构建一组
Word的代码。只需循环该集合。 -
@roccobaroccoSC 该接口包含每个枚举实现的方法(getWord),该方法允许检索它所代表的字符串文字,因为其中一些包含枚举的非法字符(例如“和/要么”)。问题是我是否可以使用反射来获取每种类型的所有单词的列表。我可以简单地将所有枚举移动到一个“Word”类,并有一个属性表示它是否是特定类型,但我更愿意将逻辑组分开。
-
您的问题和评论令人困惑。或许您应该描述一下您的总体目标。
-
小建议:不要使用
Arrays.asList(Article.values()),而是使用EnumSet.allOf(Article.class)。 -
如果你想通过字符串查找
Word,只需构建一个Map<String,Word>。当您自己发布的代码证明您不必这样做时,不清楚为什么您声称必须“检查每个单独的枚举类”。
标签: java reflection enums