是否有必要宣布Enum成员为最终实现不变性?

时间:2016-08-21 08:51:27

标签: java enums builder-pattern

我在我的代码中使用了Builder Pattern类,它通过本书将对象生成为immutable。 我很怀疑enum Size成员:

    public class Pizza {

    private final Size size;
    private final boolean isExtraCheese;
    private final boolean isPeperonni;
    private final boolean isBacon;

    public enum Size {
        SMALL, MEDIUM, BIG
    }
}

如果枚举被视为常量,为什么我可以添加final关键字?这有必要吗?

2 个答案:

答案 0 :(得分:1)

enum的成员是常量,但引用枚举值的引用变量就像任何其他引用变量一样,因此需要将它们标记为final

您可以这样做:

private Size size = Size.BIG;
size = Size.SMALL;

但将size标记为最终将阻止第二次分配。

private final Size size = Size.BIG;
size = Size.SMALL; // this will not be allowed

请记住,您将Size类型的引用变量标记为final,而不是enum Size本身。

答案 1 :(得分:0)

假设您有getter和setter而且size不是final,您可以执行以下操作:

final Pizza pizza = new Pizza.Builder(Size.BIG, false, false, false).build();
pizza.setSize(Size.SMALL);

这将使每个定义的Pizza对象不可变。