enum NESWDirection { north(0, -1), east(1, 0), south(0, 1), west(-1, 0); // cache values() static final selfType values[] = values(); private final gettable int x; private final gettable int y; *(int *x, int *y) {} int index() { ret ordinal(); } NESWDirection plus(int i) { ret getNESWDirection(index()+i); } }