Duvida List<?>  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
bestlinux
JavaEvangelist
[Avatar]

Membro desde: 30/06/2008 13:18:23
Mensagens: 359
Offline

Pessoa,

Alguém poderia me explicar o sentido de criar um atributo assim:



E como eu poderia usa-lo ?

Obrigado !

http://www.bestlinux.com.br
Ataxexe
JavaEvangelist
[Avatar]

Membro desde: 11/10/2007 15:34:17
Mensagens: 418
Localização: Brasília
Offline

O "?" funciona como um curinga. Ele diz que pode ser qualquer tipo e pode ser usado em conjunto com "extends" ou "super".

Com extends, será aceito qualquer tipo que herde o informado (<? extends Number> irá aceitar <Integer>, <Double>, etc.).

Com super, será aceito qualquer superclasse ou interface do informado (<? super Method> irá aceitar <Member>, <AccessibleObject>, <AnnotatedElement>, etc.).

Usar somente o "?" é o mesmo que usar "? extends Object".

Criar um atributo com o "?" significa dizer que você não sabe ao certo o tipo dos elementos da lista. É quase o mesmo que declarar somente List (quase o mesmo porque há casos de erros de compilação chatos caso use o "?").

This message was edited 2 times. Last update was at 09/08/2010 15:29:49


Marcelo Guimarães

https://github.com/ataxexe
http://sourceforge.net/projects/trugger
http://www.youtube.com/user/ataxexe
http://www.flickr.com/photos/ataxexe
bestlinux
JavaEvangelist
[Avatar]

Membro desde: 30/06/2008 13:18:23
Mensagens: 359
Offline

Ataxexe wrote:O "?" funciona como um curinga. Ele diz que pode ser qualquer tipo e pode ser usado em conjunto com "extends" ou "super".

Com extends, será aceito qualquer tipo que herde o informado (<? extends Number> irá aceitar <Integer>, <Double>, etc.).

Com super, será aceito qualquer superclasse ou interface do informado (<? super Method> irá aceitar <Member>, <AccessibleObject>, <AnnotatedElement>, etc.).

Usar somente o "?" é o mesmo que usar "? extends Object".

Criar um atributo com o "?" significa dizer que você não sabe ao certo o tipo dos elementos da lista. É quase o mesmo que declarar somente List (quase o mesmo porque há casos de erros de compilação chatos caso use o "?").



Pode colocar um exemplo de uso, por favor.

http://www.bestlinux.com.br
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Não há sentido nenhum em criar um atributo assim.

Há sentido em criar métodos que recebam parâmetros desse tipo.

Por exemplo:


Isso aceita como entrada uma List<String> ou uma List<SuaClasse>. O ? indica que tanto faz o tipo da lista. Você ainda poderia restringir. Por exemplo:



Esse método aceita qualquer um List<Carro> ou um List de um tipo filho de carro, como um List<Fusca> no primeiro parâmetro. E no segundo, aceita um comparador de Carro ou de qualquer classe que seja pai de carro, como Comparator<<Veiculo>>.

This message was edited 1 time. Last update was at 09/08/2010 16:00:41


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team