Multi-Dimensional Generic Arrays

This here’s a conundrum I’ve been trying to slog through for some time now. Part of it is a decided dislike of List type objects and part of it is issues with the way Generics work in Java. Here’s the problem:

The game I’m designing is going to use an map using X dimensions (Where X >= 1). This base map is most easily described as a dense rectangular array (For X == 2), or a dense cubic array (For X == 3), etc. On “Top” of this is a very sparse map, with the same dimensions of the previous map, and on top of that can be another sparse map, and on top of that can be another, ad nauseum.

Here’s a cobbled together example:
Layer 1 (Dense): Physical description of world
Layer 2 (Sparse): Location of hidden items
Layer 3 (Sparse): Location of special ground effects (Think this area is on fire/occupied by poison gas)
Layer 4 (Sparse): Location of Entities

For the most part, the Sparse maps are fairly simple to use Generics for. A HashMap<Position, T> takes care of it. For the Dense map on the bottom, it becomes more difficult to use Generics for, since

T[][] map = new T[x][];

is a violation. However, using ArrayList<ArrayList> leads to problems with replacement/excess size issues. HashMap<Position, T> may work, but again, since there’s going to be a static number of values in the map it seems like a waste.

Are there already any ‘good’, for a given value of good or reason, replacement for dense two-dimensional staticly sized arrays?

why do you want to use a generic array anyway. You said that u wanted 1 dens map and then many sparse ones, so having a generic sparse map makes sense.
But why not just have dense map take a class or an interface if you need to

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/reflect/Array.html#newInstance(java.lang.Class,%20int[])

Well, the reason for the generics is because I want to reuse the code that I’m writing for the dense map in other places without having to change it too drastically between uses.

Waterwolf’s suggestion should work, better than my current choice (Which is to have an object array and control the insertion/retrieval directly through methods, a la Java’s ArrayList).