Do you need a defensive copy of Java enumeration types?
People should return so - called "defensive copies" of private reference types This is to avoid returning references to private fields
I wonder if private enumeration types are necessary I read somewhere that enumerations are immutable reference types, so the answer should be "no" Is that right?
Solution
Enumeration itself is not immutable - but you can't create a defensive copy anyway, because only a fixed set of instances are available - you must return a reference to an existing instance instead of creating a new instance
In any case, enumerations should usually be immutable, but to offset the claim that they are immutable in themselves:
enum BadEnum { INSTANCE; private int foo; private int getFoo() { return foo; } public int setFoo(int foo) { this.foo = foo; } } class Test { public static void main(String[] args) { BadEnum.INSTANCE.setFoo(10); System.out.println(BadEnum.INSTANCE.getFoo()); // Prints 10 } }
In short:
>Make your enumeration immutable I can't remember even wanting to create a mutable enumeration. > You cannot and should not try to make defensive copies