我在我的代码中使用了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
关键字?这有必要吗?
答案 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
对象不不可变。