您可以使用 Object[] 来执行此操作,将其成员限制为 Object[] 或 int[]。
例如,下面是一个数组,其中一部分深度为三层,另一部分深度为两层:
Object[] myarray = new Object[] {
new Object[] { new int[] { 1, 2 },
new int[] { 3, 4 }},
new int[] { 5, 6 }
};
创建后,您可能想要访问成员。在你的例子中,你预先知道深度 N,所以你知道在什么深度期望一个 Object[] 以及在什么深度期望一个 int[]。
但是,如果您不知道深度,您可以使用反射确定一个成员是否是另一个 Object[] 级别或叶 int[]。
if ( myarray[0] instanceof Object[] ) {
System.out.println("This should print true.");
}
EDIT:
这是一个方法的草图[到目前为止尚未测试,抱歉],该方法在给定索引数组的情况下访问已知深度数组的成员。 m_root 成员可以是 Object[] 或 int[]。 (您可以进一步放松这一点以支持标量。)
public class Grid {
private int m_depth;
private Object m_root;
...
public int get( int ... indices ) {
assert( indices.length == m_depth );
Object level = m_root;
for ( int i = 0; i + 1 < m_depth; ++i ) {
level = ((Object[]) level)[ indices[i] ];
}
int[] row = (int[]) level;
return row[ indices[m_depth - 1] ];
}
}