在运行时定义枚举的简单方法(或由某些中间件编译时)

时间:2011-01-06 20:11:52

标签: java enums

有没有办法通过加载和解析脚本文件(可能是XML或JSON文件)中的数据来定义枚举的常量集?

我问这个是因为我在项目中密集使用枚举,他们有很多参数(比如每个条目也可以有10-15个参数),我想给最终用户一种修改它们的方法无需费心修改java源代码并重新编译。

我不认为这很容易,因为涉及一些静态类型检查,但是可能有一种简单的方法在编译时预处理文件并使用info来生成静态枚举值。我知道我可以编写一个单独的脚本来完成这项工作并生成一个准备编译的.java文件输出,但这意味着用户必须重新编译整个文件。

5 个答案:

答案 0 :(得分:3)

不是 - 请参阅Can I add and remove elements of enumeration at runtime in Java了解类似的问题。

但是,您可能会看一下http://groups.google.com/group/h2-database/web/creating-java-enum-objects-at-runtime?pli=1可能的kludge(我不保证......)

答案 1 :(得分:2)

否 - Java中的原始/内置枚举是静态的,因此它们在编译时进行处理。您需要创建一个动态标签系统(或自制的动态枚举,就像您正在寻找的那样)来实现这种功能。

祝你好运!

答案 2 :(得分:0)

你做不到。在他正在开发时,枚举本质上是程序员的工具。

即使可以在运行时向枚举添加新元素,也没有多大意义,因为根本不会使用它们。 毕竟,如果在编译时不存在枚举元素,则意味着您没有编写任何逻辑来处理该元素。

答案 3 :(得分:0)

这是基于C#,所以YMMV。如果您不得不重构枚举,您可以使用静态方法创建一个复制现有枚举设置的类,并从动态加载并使用单独方法访问的Dicitonary获取新设置。我在C#中做过similar(和SO问题)。如果你从头开始我会说 - 不要依赖枚举。

答案 4 :(得分:0)

虽然这是一个老问题,但这可能有用:http://java.dzone.com/articles/enum-tricks-dynamic-enums