[RESOLVIDO]qual significado de <?>

8 respostas
G

pessoal, bom dia!

já vi muito a utilização no java de por exemplo por ex: List ou List e etc…
mas lendo a doc sobre uma determinada classe vi assim <?> o que seria essa interrogação? na documentação ela server pra dizer que o array pode ter qualquer objeto ou ela pode ser implementada assim? tentei colocar List<?> e não deu erro, mas não aceitou nenhum objeto que eu tentei add.
como isso funciona?

8 Respostas

E

List<? extends Pessoa>

aceita qualquer classe que SEJA(extends) uma Pessoa

G

compreendi, então a ? nunca deve ser utilizada sozinha, ela na verdade ela permite melhorar a especificação do objeto da Lista… acho que enteid, obrigado!

ctosin

Olá,

O “?” significa que você pode utilizar qualquer tipo de classe. E é bem isso mesmo: você não pode adicionar elementos se declarar a lista dessa forma, pois isto poderia gerar inconsistências na lista (tem a ver com questões internas de implementação do mecanismo do generics).

Se você quer criar uma lista de apenas um tipo, declare ela com o tipo, como List. Dessa forma você vai poder adicionar elementos do tipo Cachorro. Se você quer usar o “?” e ainda assim quiser inserir elementos na lista, você precisa dizer ao Java que você só vai inserir na lista elementos de um determinado tipo ou que sejam uma superclasse desse tipo. Você poderia declarar como List<? super Cachorro>, o que permitiria a você adicionar objetos Cachorro ou objetos de uma possível superclasse de cachorro (por exemplo, Animal).

Abraço!

G

prezados,

e porque não funcionou aqui?
tenho a classe MyExecutor que estende uma thread e ao fazer assim:

List<? super MyExecutor> a = new ArrayList<Thread>();
		a.add(new Thread());

não funciona. só funciona assim:

List<? super Thread> a = new ArrayList<Thread>();
		a.add(new Thread());

mesma coisa acontece caso eu faça com extends.
pq?

ctosin

Se você declara a lista como List<? super MyExecutor>, você pode atribuir à variável listas de objetos MyExecutor ou de qualquer tipo que seja uma superclasse de MyExecutor. Mas quando o assunto é inserção de elementos, você só pode inserir objetos do tipo MyExecutor. Por isso o código não compila.

G

ok, obrigado!

E

estude sobre Generics

G

ok, obrigado. segue link da documentação para quem estiver com a mesma dúvida http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

Criado 2 de dezembro de 2011
Ultima resposta 2 de dez. de 2011
Respostas 8
Participantes 3