I have two arrays: Walls and Neighbors.
public boolean[] walls = new boolean[4];
public Cell[] neighbors = new Cell[4];
and I have an Enum:
i strongly recommend against it because the Ordinal value is based on the order in your java code.
The use of ordinal() will make you code very hard to maintain, especially if some form of persistence enters the equation.
for example if you decide to add diagonal directions like NORTH_WEST, SOUTH_EAST. if you are using ordinal(), you must add these at the bottom of your list or else what used to be SOUTH might become NORTH.
ie you can change your enyum to without (possibly) changing functionality
N (is now 0 was 0)
NE (is now 1)
E (is now 2 was 1)
SE (is now 3 )
S (is mow 4 was 2)
SW (is now 5)
W (is now 6 was 3)