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:
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.
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