"Since I have coded using JDK 1.3 and 1.4, I am familiar with Enum string pattern and int pattern, which used public static final constants to represent a collection of well-known constants of things like 'MonthOfYear.' There were several problems with this approach, such as not having a dedicated Enum type string variable, which represented months of the year. This allowed it to take any arbitrary value. The Enum int pattern can take any arbitrary value, and the compiler won't prevent this. When using Enum, you get both type-safety and compiler checking."