SE450: Type Safe Enum [2/24] Previous pageContentsNext page

An enumerated type is used to hold a fixed set of constants, and name them in a fashion to make your code more readable and maintainable.

Java doesn't have an enum type like C - thankfully! They were just integer constants, and were not typesafe.

Programmers usually get around this by creating a number of public final static int variables in an interface or class and using them to enumerate types. This can be problematic. For example, you could make a Card enum for a card game

        public class Card {
            public static final int CLUBS = 0;
            public static final int DIAMONDS = 1;
            public static final int HEARTS = 2;
            public static final int SPADES = 3;
        }
    

Problems:

To do this, use a typesafe enum pattern (example from Bloch's Effective Java), go here for some from the book.

        public class Suit {
            private final String name;
            // can't be created elsewhere!
            private Suit(String name) { this.name = name; }
            public String toString() { return name; }
            
            public static final Suit CLUBS = new Suit("clubs");
            public static final Suit DIAMONDS = new Suit("diamonds");
            public static final Suit SPADES = new Suit("spades");
            public static final Suit HEARTS = new Suit("hearts");
        }
            
    

You can also provide ordering using an ordinal to assign ordering to the objects as they are created as well.

Since the enum is a full blown class, it can do anything a class can, and be much more effective than the old enumerated type - see the book and Bloch's Effective Java for more examples.

Previous pageContentsNext page