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

问题描述 投票:0回答:4

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

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

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

java enums
4个回答
2
投票

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

祝你好运!


0
投票

你不能。枚举本质上是程序员开发时的一种工具。

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


0
投票

这是基于 C# 的,所以 YMMV。如果您必须重构枚举,您可以创建一个具有复制现有枚举设置的静态方法的类,并从动态加载并使用单独方法访问的字典中获取新设置。我在 C# 中做了一些类似的事情(以及这个SO问题)。如果你是从头开始,我会说——不要依赖枚举。


0
投票

我构建了一个对您的项目有用的动态枚举。我已经将其发布在 GitHub 上,您可以在这里参考:flexiEnums

© www.soinside.com 2019 - 2024. All rights reserved.