elementos = (E[][]) java.lang.reflect.Array.newInstance(elementos.getClass(), new int[]{linhas, colunas});
T
thingol
Completando a resposta do Ozix (que está correta!), vamos dar um exemplo:
importjava.lang.reflect.Array;classCliente{publicStringnome;publicdoublesaldo;}classArrayBidimensional{public<T>T[][]alocarArray(Class<T>klass,intlinhas,intcolunas){@SuppressWarnings("unchecked")T[][]ret=(T[][])Array.newInstance(klass,linhas,colunas);returnret;}publicstaticvoidmain(String[]args){Cliente[][]clientes=(newArrayBidimensional()).alocarArray(Cliente.class,10,20);System.out.println(clientes.getClass().getSimpleName());// Imprime "Cliente[][]"System.out.println(clientes.length);// número de linhasSystem.out.println(clientes.length>0?clientes[0].length:0);// número de colunas}}
Eu estou precisando de um código para fazer a criação da matriz conforme o tipo do parâmetro, algo parecido com isso:
elementos=newE[linhas][colunas];
Usando reflexão eu consigo para matrizes de uma dimensão, exemplo:
Class<E> clazz;
elementos = (E[])java.lang.reflect.Array.newInstance(clazz, linhas*colunas);
Mas não para duas ou mais, alguém tem alguma sugestão?
Simplesmente não use arrays bidimensionais. Lembre-se que em java arrays n-dimensionais são arrays dee arrays de arrays ... Para matriz de duas dimensões é simples usar um só array. Ai a copia se torna trivial.