Mivel a Java nyelv egy évtizedig nem tartalmazott enumerációs típusokat, az ötös Java verziótól bevezetett enum kevesek által használatos, és még kevesebbek által használatos igazán jól. Induljunk egy olyan enum típusból, amely a négy égtájat hordozza magában, s emígy néz ki:

public enum Direction
{
NORTH,
SOUTH,
EAST,
WEST,
}

Ez egy szimpla enum deklaráció, azonban az enum hordozhat metódusokat is:

public enum Direction
{
  NORTH,
  SOUTH,
  EAST,
  WEST;
   
  public Direction getOpposite()
  {
    return [...];
  }
}

A probléma az, hogy az adott égtájjal szembeni égtájat nem tudjuk megadni egyszerűen. Ezért próbálkozhatunk azzal, hogy egy konstruktort is elkészítünk az enum osztályunkhoz:

public enum Direction
{
  NORTH(SOUTH),
  SOUTH(NORTH),
  EAST(WEST),
  WEST(EAST);

  Direction opposite;

  Direction(Direction opposite)
  {
    this.opposite = opposite;
  }

  public Direction getOpposite()
  {
    return opposite;
  }
}

A fenti programmal a probléma, hogy a SOUTH referenciára előbb hivatkozunk, mint ahogy az deklarálva van. Egy apró kis csellel megoldható azzal, hogy röptében deklaráljuk minden egyes enum osztály getOpposite metódusát:

public enum Direction
{
  NORTH { public Direction getOpposite() { return SOUTH; } },
  EAST { public Direction getOpposite() { return WEST; } },
  SOUTH { public Direction getOpposite() { return NORTH; } },
  WEST { public Direction getOpposite() { return EAST; } };
   
  public abstract Direction getOpposite();
}