【问题标题】:Is it OK/possible to modify instance variables inside an enum declaration?在枚举声明中修改实例变量是否可以/可以?
【发布时间】:2011-02-22 18:28:53
【问题描述】:

或者,换个说法:枚举类型可以是“可变的”吗?

public enum Foo {
    ONE,TWO;

    private String bar;

    Foo() { this.bar = ""; }
    String bar() { return bar; }

    // legal?
    void bar(String bar) { this.bar = bar; }
}

我想如果我想修改它,它不再是枚举类型。

想法?

【问题讨论】:

  • 我看到了这篇文章。他可能是对的。 link
  • 它编译。但是,枚举类型不应该是不可变的吗?为什么 Java 让我这样做?

标签: java dynamic enums instance


【解决方案1】:

绝对有效。这只是一个非常糟糕的主意。调用者可能期望枚举是正确不可变的。在某些情况下,您可能希望使其“看起来”是不可变的,例如使用缓存,同时仍会改变内部变量……但这在很大程度上是一种极端情况。

至于为什么 Java 允许您这样做...即使它强制所有成员变量都是最终的,这不会使枚举值 真正 不可变...例如,您可以List<String> 每次调用特定方法时都会修改...

从根本上说,Java 不太擅长执行不变性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多