@OP
Carey Brown wrote:Could have designed it as an immutable class
Joshua Bloch in his famous Effective
Java (Item 17), says, that an Immutable class to be considered truly as such supposed to comply with the next 5 rules:
1. No methods which let modify object's state
2. Class cannot be extended
[breach of this rule]
3. All fields final
[breach of this rule]
4. All fields private
5. No ability to get references to mutable fields
So after small improvements Carey's version would be great.