在运行时Java更改枚举

有没有办法在Java中为内置的枚举类添加元素?

我的问题类似于我可以在Java中添加和删除运行时枚举的元素 ,但这个问题似乎是为了构建自己的枚举然后修改它。 我假设某个地方存在一个我无法改变的枚举,类似于

enum Days{ MONDAY, TUESDAY, WEDNESDAY } 

我想在周四,周五等地添加它。 不幸的是,关于如何使用界面来实现我的目标的建议,或其他比枚举更有效的方法,这里不适用。

根据我的理解,枚举是隐式最终的,所以我不能扩展它并添加更多元素。 它有私有字段,但似乎我可以使用reflection来访问那些 – 我可以更改其中一个私有字段,即使我不能添加新字段,即周一到周四更改?

编辑:澄清情况

人们建议在将代码编译到程序之前更改代码。 我的代码是一个我无法改变的大项目的一部分; 在我的类访问它之前,具有枚举的类由较大的程序加载。 那时,我想将缺少的元素添加到枚举中。 字节码操作仍然是要走的路吗?

枚举旨在成为具有常量感的静态,最终,不可变,实例控制的对象。 每当您的项目包含编译时已知的事物的自然分组或列表时,您应该考虑枚举。

JVM保证枚举在运行时是实例控制的和不可变的。 枚举的二进制兼容性也得到保证,以便在以后添加枚举常量时,程序将继续运行。

简短的回答是:“不,没有简单的方法来扩展java中的枚举类。”

一种替代方法是使基本枚举实现一个接口,该接口充当枚举常量的基本类型。

然后可以通过创建实现接口的新枚举来“扩展”枚举。 即便如此,根据设计,这并不是打算在运行时进行的。

您可以在运行时更改枚举,我在运行时更改类,然后再加载它。 您可以在运行时编译更改的枚举并加载它,也可以使用字节代码操作来更改它。

简而言之,包括您需要的所有枚举,您永远不需要在运行时添加它们。 例如,如果一周内只有七天,则在编译时包括所有这些日期。