The subclass constructor should be private.
The ordinal value is used to compare (done when sorting, for example) two Enum objects and to order the objects in
iterators and PropertyEditors. No two instances of a subclass should have the same ordinal value or name. To safely
add new Enum subclass instances and preserve previous orderings in containers the best thing to do is to always use
a new ordinal value when creating a new instance rather than changing old instance's ordinal value.
If an enum subclass instance is ever removed, there should be a comment in the file that reserves the old ordinal
value so that any old serialized files don't accidentally map an old enum to a new enum.