Pegar Tipo do Parametro do Array

3 respostas
bestlinux

Pessoal,

Preciso do seguinte.

Tenho um array de String, por exemplo:

public static void metodoConsulta(Object retorno) throws SecurityException, NoSuchFieldException

{

ArrayList<?> teste = (ArrayList<?>) retorno;

Eu preciso saber o tipo de parametro que este ArrayList esta armazenando para depois fazer um instanceof. Exemplo:

if (tipo_do_parametro_do_array_list instanceof String)

if (tipo_do_parametro_do_array_list instanceof Integer)

Tem como fazer isso ?

3 Respostas

bestlinux

Ninguem ??? :cry: :cry: :cry:

E

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:

import java.util.ArrayList;


public class teste {
	
	public static void main (String args[])
	{
		ArrayList<String> listString = new ArrayList<String>();
		listString.add("Array de String");
		
		ArrayList<Integer> listInt = new ArrayList<Integer>();
		listInt.add(1);
		
		teste.reflection(listInt);
		teste.reflection(listString);
	}
	
	public static void reflection(Object retorno)
	{
		if (retorno instanceof ArrayList)
		{
			ArrayList<?> teste = (ArrayList<?>) retorno;
			
			if (teste.get(0) instanceof String)
			{
				System.out.println("String");
			}
			
			if (teste.get(0) instanceof Integer)
			{
				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.

Criado 15 de setembro de 2010
Ultima resposta 15 de set. de 2010
Respostas 3
Participantes 2