相关疑难解决方法(0)

Java是否存在可变性用例和可能性?

我不知道我是否是唯一知道这一点的人,但是枚举的值不是隐含的最终值,可以修改.

  enum EnumTest {
    TOTO("TOTO 1"),
    TATA("TATA 2"),
    ;

    private String str;

    private EnumTest(String str) {
      this.str = str;
    }

    @Override
    public String toString() {
      return str;
    }
  }

  public static void main(String[] args) {
    System.out.println(EnumTest.TATA);
    EnumTest.TATA.str = "newVal";
    System.out.println(EnumTest.TATA);
  }

TATA 2
newVal
Run Code Online (Sandbox Code Playgroud)

这些值通常在实例创建(TOTO("TOTO 1"))时初始化,但除了我自己之外,我从未见过有人使用final关键字来表示应该是不可变的枚举变量.这不是问题的关键,只是想知道我是否是唯一意识到这一点的人.


我想知道的是,是否有任何用例来创建可变的枚举?

而且我也想知道我们可以用枚举做的限制(良好做法与否).我没有测试它,但也许枚举可以注入Spring bean?至少看起来我们可以注释每个实例(@Deprecated可以正常工作),以及方法.

java enums spring

9
推荐指数
2
解决办法
4674
查看次数

在运行时Java中更改枚举

有什么方法可以向Java中的内置枚举类添加元素?

我的问题类似于Java能否在运行时添加和删除枚举元素,但该问题似乎旨在构建自己的枚举,然后对其进行修改。我假设存在无法更改的现有枚举,例如

enum Days{ MONDAY, TUESDAY, WEDNESDAY }
Run Code Online (Sandbox Code Playgroud)

我想在此添加星期四,星期五等。因此,不幸的是,关于如何使用接口来实现我的目标的建议,或比枚举更有效的其他方法的建议,在这里不适用。

据我了解,枚举是隐式最终的,因此无法扩展它并向其中添加更多元素。它具有专用字段,但看来我可以使用反射来访问这些字段-即使我不能添加一个新的专用字段,也可以更改一个专用字段,例如,将星期一更改为星期四?

编辑:澄清情况

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

java enums runtime

3
推荐指数
2
解决办法
4283
查看次数

标签 统计

enums ×2

java ×2

runtime ×1

spring ×1