当前位置: 首页 > 知识库问答 >
问题:

具有枚举类型字段的Java枚举

闻人和歌
2023-03-14
public enum EFormSw {

    OBJ_KEY_LIST("Object Keys", EObjKeyType.class),
    OBJ_NOTE_LIST("Object Notes",  EObjNoteType.class);

public final String label;
public final Class</*"E is an Enum"*/> enumType;

// Constructor...
EFormSw.OBJ_KEY_LIST.enumType.values().someThingElse().

共有1个答案

涂煌
2023-03-14

您可以使enumtype成为类<?扩展枚举<?>>:

enum EFormSw {

  OBJ_KEY_LIST("Object Keys", EObjKeyType.class),
  OBJ_NOTE_LIST("Object Notes", EObjNoteType.class);

  private final String label;
  private final Class<? extends Enum<?>> enumType;

  EFormSw(String label, Class<? extends Enum<?>> enumType) {
    this.label = label;
    this.enumType = enumType;
  }

  public String getLabel() {
    return label;
  }

  public Class<? extends Enum<?>> getEnumType() {
    return enumType;
  }
}

在遍历eformsw的值时,可以使用getEnumConstants获取表示枚举类型的枚举值的enum<?>[],但是您不能对其做太多的工作,因为您不知道它是哪种确切的枚举类型:

for (EFormSw constant: EFormSw.values()) {
    Enum<?>[] values = constant.getEnumType().getEnumConstants();
}

(您仍然可以对数组元素调用java.lang.enumjava.lang.object中声明的大多数方法,所以如果您只需要这些,就可以使用这些方法。)

如果您希望使用eObjKeyTypeeObjNotetype之间共享的一些公共功能,可以将所有公共功能提取到它们都实现的公共接口中:

interface EObjType {
    // ...
}

enum EObjKeyType implements EObjType {
    // ...
}

enum EObjNoteType implements EObjType {
    // ...
}

然后将enumtype更改为:

private final Class<? extends EObjType > enumType;

现在您可以获得eObjType[]

 类似资料:
  • 枚举类(“新的枚举”/“强类型的枚举”)主要用来解决传统的C++枚举的三个问题: 传统C++枚举会被隐式转换为int,这在那些不应被转换为int的情况下可能导致错误 传统C++枚举的每一枚举值在其作用域范围内都是可见的,容易导致名称冲突(同名冲突) 不可以指定枚举的底层数据类型,这可能会导致代码不容易理解、兼容性问题以及不可以进行前向声明 枚举类(enum)(“强类型枚举”)是强类型的,并且具有类

  • 问题内容: 基本上,我所做的是为州写一个枚举,我不仅希望能够像州一样访问它们,而且还希望访问它们的缩写以及它们是否是原始殖民地。 这似乎按我预期的那样工作。我可以 对于涉及枚举的特定情况,这是执行此操作的最佳方法,还是设置和格式化此枚举的更好方法?预先感谢所有人! 问题答案: 首先,枚举方法不应大写。它们是与其他方法一样的方法,具有相同的命名约定。 其次,您所做的并不是建立枚举的最佳方法。不要为每

  • 例如,我如何做类似的事情: 结果示例:

  • 问题内容: 例如,我该怎么做: 结果示例: 问题答案: 迅捷4.2+ 从Swift 4.2(使用Xcode 10)开始,只需添加协议一致性即可从中受益。要添加此协议一致性,您只需要在某处写: 如果枚举是您自己的,则可以直接在声明中指定一致性: 然后,以下代码将打印所有可能的值: 与早期Swift版本(3.x和4.x)的兼容性 如果您需要支持Swift 3.x或4.0,则可以通过添加以下代码来模仿S

  • 我试图在Avro模式中创建Union字段,并用它发送相应的JSON消息,但要有一个字段-。 https://avro.apache.org/docs/1.8.2/spec.html#工会 具有相应JSON数据的最简单联合类型(avro模式)的示例是什么?(尝试制作不含NULL/空数据的示例和含NULL/空数据的示例)。

  • 枚举类型(也可以称为“枚举器”)由一组具有独立标识符(名称)的整数类型常量构成,在 C# 中枚举类型不仅可以在类或结构体的内部声明,也可以在类或结构体的外部声明,默认情况下枚举类型中成员的默认值是从 0 开始的,然后逐一递增。 在 C# 中可以使用 enum 关键字来声明枚举类型,语法格式如下所示: enum enum_name{     enumeration list; } 其中,enum_n