Self referential enum with immutable parameters
问题 Consider the following sscce public enum Flippable A (Z), B (Y), Y (B), Z (A); private final Flippable opposite; private Flippable(Flippable opposite) { this.opposite = opposite; } public Flippable flip() { return opposite; } } This doesn't compile, because Z and Y haven't been declared to be allowed to be arguments of A and B 's constructor. Potential solution 1: Hardcoded Methods public enum Flippable { A { public Flippable flip() { return Z; } }, B { public Flippable flip() { return Y; } }