I address this fact in the book in the section on constant objects. Avoiding such a problem is a rather minor task with the readResolve() method. As for the term for it, that is personal preference. The improtant part is that the concept gets through. A
s for the term "type-safe-enum" I personally think that would cause confusion since the code is not exactly declaring an enum (which has other semantics as well) but merely several objects that cannot be changed (IE constant). There is no convention that says that only integral and string and other primitive types are the only kinds of things that are constant.
A constant is simply something that can not be changed; the antithesis of variable. As for the term "type-safe-enum pattern, I never read Blochs book until after I wrote my book. Its nto terribly suprising that more than one developer thought of it. Its a rather good idea as Bloch has said himself, no matter what you call it.