A resposta simples, infelizmente, é não. Há um palavrão bem chato para isso em inglês - “generic types are not reified in Java”. Procure isso se tiver alguma curiosidade.
Se você souber que o array contém elementos de apenas um tipo, no entanto, você pode verificar se o ArrayList é vazio ou não, e se não for, pegar o tipo do primeiro elemento (ou do primeiro elemento não-nulo, se você aceitar null como elemento desse ArrayList).
bestlinux
entanglement:
A resposta simples, infelizmente, é não. Há um palavrão bem chato para isso em inglês - “generic types are not reified in Java”. Procure isso se tiver alguma curiosidade.
Se você souber que o array contém elementos de apenas um tipo, no entanto, você pode verificar se o ArrayList é vazio ou não, e se não for, pegar o tipo do primeiro elemento (ou do primeiro elemento não-nulo, se você aceitar null como elemento desse ArrayList).
Bom, infelizmente, o jeito de fazer isso é na base da famosa “marretada”. Mas vamos la, fiz uma solução, vou deixar aqui para quem precisar algum dia:
importjava.util.ArrayList;publicclassteste{publicstaticvoidmain(Stringargs[]){ArrayList<String>listString=newArrayList<String>();listString.add("Array de String");ArrayList<Integer>listInt=newArrayList<Integer>();listInt.add(1);teste.reflection(listInt);teste.reflection(listString);}publicstaticvoidreflection(Objectretorno){if(retornoinstanceofArrayList){ArrayList<?>teste=(ArrayList<?>)retorno;if(teste.get(0)instanceofString){System.out.println("String");}if(teste.get(0)instanceofInteger){System.out.println("Inteiro");}}}}
Lembrando que funcionou apenas pq meu Array foi alimentado antes, ou seja, eu não passo nulo, tem sempre um elemento. Sendo que, o que eu realmente precisava era passar apenas o Array nulo, massss…ta resolvido.