java - 在 Java 中使用共享接口(interface)迭代枚举(类对象)

标签 java reflection enums

我有几个实现接口(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/

相关文章:

java - 如何计算每个方法可能抛出的异常集,包括运行时异常?

java - 是否可以在使用反射时创建匿名类?

c# - 如果调用的方法存在,为什么会出现 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException?

java - 枚举类型中静态 block 的执行顺序 w.r.t 到构造函数

c++ - 将枚举值映射到 C++ 中的模板参数

java - Java 枚举器语法

java - 如何在 JPA 中使用 CriteriaQuery 转换 SQL 查询

java - Lex 无法访问 Lambda 函数

java - 如何在 Eclipse 中添加自定义文件(为每个创建的项目构建)?

java - 无法在运行时设置 SolrDocument 注释