【问题标题】:How to create enum dynamically?如何动态创建枚举?
【发布时间】:2017-08-24 14:18:24
【问题描述】:

我需要根据数据库中的表创建一个枚举。

数据库表 MyColors:id/title/value 1/红/1 2/绿色/4

动态创建

enum MyColors {
    Red=1,
    Green=4;
}

【问题讨论】:

  • 这是一个有点矛盾的问题。枚举通常用于您知道在运行时之前存在的实例。不过,我理解你的情况。我也问过类似的问题:stackoverflow.com/questions/492096/…
  • 你到底想做什么? -- 如果你想在你的 sql 结果中用红色替换 1,用绿色替换 4,你可以做一个连接来显示相应的名字
  • 您想要创建的内容无法编译,1 不能分配给 MyColors.Red
  • 目标是在运行时创建一个枚举对象还是吐出一个枚举定义(文本)以便以后在代码中使用?
  • 重复,这一直出现。不幸的是,Java 的 enum 不能动态创建。 stackoverflow.com/questions/857414

标签: java


【解决方案1】:

您可以通过从数据库中读取并以有助于构建枚举的格式简单地输出结果来动态创建源代码。但是,在运行时创建枚举是不切实际的。使用某种关联数组会更好。

【讨论】:

  • 在我曾经工作过的一家公司,我们沿着这条路走,直到我们达到最大数量的限制(在 Java 编译器或语言定义中,我不记得)是可行的类的常量,因此他们必须将源生成拆分为较小的文件。这是一个极端情况,但在类型健全性和 IDE 自动完成方面,一般原则比使用 Map 更好。这与jOOQ 用于处理数据库元数据的方法相同。
  • 同意。甚至早在达到该限制之前,就会出现一个点,即表示为源代码常量的值会失去所有值。运行时查找更加理智。
【解决方案2】:

【讨论】:

  • 我喜欢这个主意。我也有同样的问题。在一个非常大的项目中随处使用的枚举,我们现在突然想成为数据库驱动的......重构所有代码让我不寒而栗,而动态构建枚举听起来会简单几个数量级。
【解决方案3】:

一种选择是将 XML Schema 和所需的值定义为枚举并生成类文件,以便我们可以在源代码之外管理值,但是我们不能从数据库中动态生成枚举值。

【讨论】:

    【解决方案4】:

    不清楚是否要生成源代码。我猜不是,因为即使在同一个程序中编译的任何代码都无法访问枚举对象,除非通过反射。

    那么为什么不使用 JPA 将表映射到 ColorEntity 对象呢? 然后,您可以获得这些实体的列表或地图,或者您需要的任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多