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:
Code Block |
---|
public enum Direction { NORTH, SOUTH, EAST, WEST, } |
Ez egy szimpla enum deklaráció, azonban az enum hordozhat metódusokat is:
Code Block |
---|
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:
Code Block |
---|
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:
Code Block |
---|
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(); } |