Java Enum relational modelling
As I have blogged about before, the Java Enum is almost perfect . I say almost because of the annoying restriction that its constructor cannot include a relation to itself, due to forward reference limitations when using the Sun compiler. The issue came up again recently when I wanted to model authority roles in Wicket , so I spent a bit more time with the issue and the following is what I've learned. First though, a recap of the original problem. Consider the following attempt at modeling states of a CD player: public class IlligalForwardReference { enum Player{ PLAYING(Player.PAUSED, Player.STOPPED), PAUSED(Player.PLAYING, Player.STOPPED), STOPPED(Player.PLAYING); private final EnumSet<Player> transitionStates; Player( final Player... states){ this .transitionStates = EnumSet.copyOf( Arrays.asList(states)); } public EnumSet<Player> getTransitionStates(){ return tra