List <?> - Como descobrir o tipo

8 respostas
F

Ola tenho a seguinte declaração.

List<?> sourceValue = (List<?>) htmlListShuttle.getSourceValue();

quero saber qual a classe generica de sourceValue …
por ex … digamos que minha lista é de Usuario …
como faço para recuperar essa classe Usuario a partir de um List<?>
???

8 Respostas

R

Não tem jeito…

O que poderia ser feito é um reflection no retorno do método getSourceValue() para verificar o tipo de retorno…
Mas se fosse parametrizado o getSourceValue(), voce nem precisaria do reflection pois o retorno já estaria especificado na classe

F

po… me ajuuuuuuuuuda neh rhsursa :lol:
tem que ter jeito :frowning: :evil:

R

Fernando H. Gomes:
po… me ajuuuuuuuuuda neh rhsursa :lol:
tem que ter jeito :frowning: :evil:

Tem jeito de pegar o usuario fazendo um cast…

(Usuario)lista.get(0)

Mas saber de que tipo é a lista… tem jeito nao…

ou entao vc pode fazer um instanceof, para verificar se o retorno é de Usuario mesmo

if (lista.get(0) instanceof Usuario){ Usuario usuario = (Usuario)lista.get(0); }

F

Mas bah… e se a lista tiver vazia ?? :shock:
que por acaso é o caso …
:frowning: :cry:

R

Fernando H. Gomes:
Mas bah… e se a lista tiver vazia ?? :shock:
que por acaso é o caso …
:frowning: :cry:

Esse é o caso onde não tem jeito :wink:

O retorno de getSourceValue() é simplismente um List???

ou List?

P

Se a lista for um atributo acessível de uma classe, você pode fazer da seguinte forma:

public class Teste {
	public List<String> lista = new ArrayList<String>();
	
	public static void main(String args[]) {
		Teste t = new Teste();
		System.out.println(t.getClass().getFields()[0].getGenericType());
        }
}
F

pozzo atualmente eu to usando dentro de um método… mas posso tentar usar na minha classe como atributo global.

garcia … eu to fazendo um cast nele pra List<?> ou ate poderia ser simplesmente List …
é pra ser um método generico… entao nao sei qual é a classe …

R

Fernando H. Gomes:
pozzo atualmente eu to usando dentro de um método… mas posso tentar usar na minha classe como atributo global.

garcia … eu to fazendo um cast nele pra List<?> ou ate poderia ser simplesmente List …
é pra ser um método generico… entao nao sei qual é a classe …

É… só tem jeito de saber, se estiver explicitado estaticamente em algum lugar do programa (atributo, retorno de método, parametro de método, genérico da classe)…

Quando a lista é dinamica, não tem como saber mesmo…

Nem isso:

List<String> minhaLista = new ArrayList<String>();

//quero perguntar aqui qual é o tipo de minhaLista

Não tem jeito…

É um negócio chamado erasure… todas essas variáveis locais, perdem seus generics na compilacao…

Criado 26 de abril de 2010
Ultima resposta 26 de abr. de 2010
Respostas 8
Participantes 3