New Java Topics: Enums

The J2SE version 5.0 of the Java programming language added enumerated types whose declaration syntax is similar to that of C:

  enum Cardsuit { CLUBS, DIAMONDS, SPADES, HEARTS };
  ...
  Cardsuit trump;

This lesson is taken from Wikipedia.

The Java type system treats enumerations as a type separate from integers, and intermixing of enum and integer values is not allowed. In fact, an enum type in Java is actually a special compiler-generated class rather than an arithmetic type, and enum values behave as global pre-generated instances of that class. Enum types can have instance methods and a constructor (the arguments of which can be specified separately for each enum value). All enum types implicitly extend the
Enum abstract class. An enum type cannot be instantiated directly.[5]

Internally, each enum value contains an integer, corresponding to the order in which they are declared in the source code, starting from 0. The programmer cannot set a custom integer for an enum value directly, but one can define overloaded constructors that can then assign arbitrary values to self-defined members of the enum class. Defining getters allows then access to those self-defined members. The internal integer can be obtained from an enum value using the ordinal() method, and the list of enum values of an enumeration type can be obtained in order using the values() method. It is generally discouraged for programmers to convert enums to integers and vice versa.[6] Enumerated types are Comparable, using the internal integer; as a result, they can be sorted.

The Java standard library provides utility classes to use with enumerations. The EnumSet class implements a Set of enum values; it is implemented as a bit array, which makes it very compact and as efficient as explicit bit manipulation, but safer. The EnumMap class implements a Map of enum values to object. It is implemented as an array, with the integer value of the enum value serving as the index.


Video Presentation on Enum