| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/01/2010 10:04:43
|
TiagoTC
JavaTeenager
Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline
|
Por que não se pode fazer list.add("teste"); ?? Quando vc usa <? extends String> vc não está dizendo que qualquer subclasse de String (incluindo a própria classe String) poderá ser usada?
Outra coisa, neste caso, o único tipo permitido ali é a própria String não? Uma vez que a classe String é final...
Obrigado!
This message was edited 1 time. Last update was at 23/01/2010 10:05:28
|
Pérola: "Nunca coloque seu celular em um forno de microondas, pois isso faz com que a bateria exploda" - Manuais de telefones celulares |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/01/2010 11:22:56
|
tnaires
GUJ Master
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline
|
Como você bem observou, a classe String é final. Por isso nem vale a pena escrever List<? extends String>, é melhor trabalhar diretamente com List<String>.
De qualquer forma, nunca é seguro adcionar elementos a uma collection que usa wildcards. Veja este link:
http://java.sun.com/docs/books/tutorial/extra/generics/wildcards.html
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/01/2010 08:09:42
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
Primeiramente, como o tnaires disse aí em cima, <? extends String> não faz sentido, pois String é final. No entanto, a linguagem permite isso e o javac não chia, empora o compilador do eclipse vá te dar uma warning (e com razão).
No entanto, sabemos que isso pode aparecer na prova para cobrar o seu conhecimento, mesmo que não tenha sentido. Então, vamos supor que faça sentido e vamos supor que exista uma subclasse de String chamada String2, assim List<? extends String> poderia ser List<String> ou List<String2>. Quando você dá um list.add("teste"); está adicionando um objeto da classe String em uma lista que pode ter um tipo mais restrito, pode ser uma List<String2>.
Esse é o tipo de coisa bem confusa e non-sense que aparece na prova. Para ficar mais fácil de entender, vamos usar Animal em lugar de String, aonde você tem uma classe Animal e tem subclasses Gato, Cachorro, Cavalo, etc. Se você tem uma List<? extends Animal>, isto pode ser List<Cachorro>, List<Gato>, List<Cavalo>, ou simplesmente List<Animal>.
Se você tiver isso:Você vai ter esse mesmo erro que você teve com String, com a mesma causa. No entanto aqui, as coisas ficam bem mais óbvias. Você tem um Animal teste, que você não sabe qual animal é. Vamos supor que seja um cavalo, mas o compilador não vai saber disso. List<? extends Animal> pode ser um List<Gato> ou um List<Cachorro>, e você não pode adicionar um animal qualquer neles, porque vai que esse animal é um cavalo? O compilador percebe que o elemento que está sendo inserido PODE NÃO SER específico o suficiente para que a adição seja válida, logo você tem um erro de compilação.
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
|
|
|
|