 <p>How about putting the Direction and Type as members of the enum, something like this:</p> <pre><code>public enum State { ONE_STATE(Direction.LEFT, Type.BIG), SECOND_STATE(Direction.RIGHT, Type.SMALL); THIRD_STATE(Direction.UP, Type.SMALL); private Direction direction; private Type type; private State(Direction direction, Type type) { this.direction = direction; this.type = type; } public static State getState(Direction dir, Type type) { for (State state : values()) { if (state.direction == dir &amp;&amp; state.type == type) { return state; } } return THIRD_STATE; } } </code></pre> <p>Note that this will not work if there is more than one different combination for each enum. In that case, you will need to use some sort of lookup table as suggested by another poster. For example, you could use a <code>Map&lt;Pair&lt;Direction, Type&gt;, State&gt;</code>. (Java doesn't have a <code>Pair&lt;T, U&gt;</code> class, but you can easily make one or find one in lots of different libraries.)</p>