Problema dificil de arrays

Iniciado por 4dr14n31t0r, 20 Noviembre 2015, 14:43 PM

0 Miembros y 1 Visitante están viendo este tema.

4dr14n31t0r

El problema que me he propuesto a mi mismo consiste en crear un array de n dimensiones en tiempo de ejecucion.
(cuidado, no confundir con array de longitud n. Si las dimensiones son 2 es una matriz, de 3 una matriz tridimensional, etc.)
Al principio parece imposible, pero se me ocurrió que si utilizo clases genéricas puedo hacer un array de una dimension más tal y como muestra el ssiguiente código:
Código (java) [Seleccionar]
package test;

public class ClaseGenerica<T> {

ClaseGenerica<T[]> t;
T u;

Test2<?> u = new Test2<Integer>();
for(int i = 0; i < 10; i++){
u.t = new Test2<>();
u = u.t;
}
public static void main(String... args){

ClaseGenerica<Integer> t = new Test2<>();
t.t = new ClaseGenerica<>();
t.t.t = new ClaseGenerica<>();
t.t.t.t = new ClaseGenerica<>();
t.t.t.t.t = new ClaseGenerica<>();
t.t.t.t.t.t = new ClaseGenerica<>();
t.t.t.t.t.t.t = new ClaseGenerica<>();
t.t.t.t.t.t.t.t = new ClaseGenerica<>();
t.t.t.t.t.t.t.t.t = new ClaseGenerica<>();
t.t.t.t.t.t.t.t.t.t = new ClaseGenerica<>();
t.t.t.t.t.t.t.t.t.t.t = new ClaseGenerica<>();
//En total el array tiene 10 dimensiones, no se molesten en contarlos
t.t.t.t.t.t.t.t.t.t.t.u = new Integer[0][][][][][][][][][]; //No da error de compilación
//Como pueden ver, no he necesitado declarar un array de N dimensiones, solo instanciarlo

}

}


Es un poco evidente que esto se puede hacer tambien con un bucle for y el operador '?' tal y como muestro a continuación, pero el problema viene después al querer instanciar ese array, que es lo que me gustaria a mi saber.

Código (java) [Seleccionar]
package test;

public class ClaseGenerica<T> {

ClaseGenerica<T[]> t;
T u;

public static void main(String... args){

ClaseGenerica<?> t = new ClaseGenerica<Integer>();
for(int i = 0; i < 10; i++){
t.t = new ClaseGenerica<>();
t = t.t;
}
t.u = new Integer[0][][][][][][][][][]; //Obviamente, error de compilación
}

}

¿Alguna idea de como solventar este problema? No es que tenga mucha utilidad práctica, pero es por curiosidad