我有几个实现接口(interface) 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;
}
有没有办法迭代这些枚举?我想这将涉及创建一个类对象列表,但我不确定如何将其转换回实际值。
如果相关的话,Word 和每个枚举都位于同一个包(词典)中。
最佳答案
只有当您还不知道枚举时,反射才有意义 (即您必须发现包中的枚举)。
如果您已经知道枚举, 那么你的代码的变化是合理的。
例如:
public List<Word> allWords()
{
List<Word> returnValue = new LinkedList<>();
returnValue.addAll(Arrays.asList(Article.values()));
returnValue.addAll(Arrays.asList(Conjunction.values()));
returnValue.addAll(Arrays.asList(Verb.values()));
// And so on...
return returnValue;
}
我建议一个列表
。 因为Set
将按名称删除重复项。
编辑: 我的列表建议现在看来没有必要。
编辑2:
根据评论,
设定并不像我想相信的那么糟糕。
仍然,
您正在将该集合用作“垃圾列表”,
我建议 List
是更好的选择。
关于java - 在 Java 中使用共享接口(interface)迭代枚举(类对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70296197/