| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 11:12:59
|
nbluis
GUJ Master
![[Avatar]](/images/avatar/f0682320ccbbb1f1fb1e795de5e5639a.jpg)
Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline
|
Mas o debate é legal.
Olha um comportamento engraçado que eu testei agora.
Suponha que voce tenha uma classe cachorro ok ?
A saida:
Se eu faço o seguinte:
Colocando uma chamada a lista4.get(0) que é o objeto Cachorro.
Acontece um erro:
Se chamo qualquer outro funciona beleza.
Não fui muito a fundo, mas parece que como na implementação do ArrayList ele armazena em um Object[] dentro da lista ele continua trabalhando mesmo com um objeto inválido.
E quando fazemos o get, por fazer referência ao generico String ele tenta fazer o cast e quebra tudo.
As vezes a gente encontra umas coisas engraçadas estudando estes exemplos.
|
Luis Eduardo Bohrer
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 11:30:54
|
C?ar.Rodolfo
HelloWorld
![[Avatar]](/images/avatar/56c6d19ee947025ec19f9eb9b283f368.jpg)
Membro desde: 14/07/2009 08:36:51
Mensagens: 12
Offline
|
Ué aquele primeiro codigo funcionou ake no NetBeans...
Não ta dando certo pq ele converteu pra ArrayList<Number>?
|
SCJP 6.0
Mata teu tempo e matará tua carreira... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 11:42:23
|
C?ar.Rodolfo
HelloWorld
![[Avatar]](/images/avatar/56c6d19ee947025ec19f9eb9b283f368.jpg)
Membro desde: 14/07/2009 08:36:51
Mensagens: 12
Offline
|
Isso ake tbm é valido?
ArrayList<? extends Number> c = new ArrayList<Integer>();
|
SCJP 6.0
Mata teu tempo e matará tua carreira... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 11:50:22
|
vmsb11
Java Ninja
Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline
|
Isto funciona mas vc não poderá adicionar nada na lista....
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 11:51:28
|
vmsb11
Java Ninja
Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline
|
nbluis wrote:Mas o debate é legal.
Olha um comportamento engraçado que eu testei agora.
Suponha que voce tenha uma classe cachorro ok ?
A saida:
Se eu faço o seguinte:
Colocando uma chamada a lista4.get(0) que é o objeto Cachorro.
Acontece um erro:
Se chamo qualquer outro funciona beleza.
Não fui muito a fundo, mas parece que como na implementação do ArrayList ele armazena em um Object[] dentro da lista ele continua trabalhando mesmo com um objeto inválido.
E quando fazemos o get, por fazer referência ao generico String ele tenta fazer o cast e quebra tudo.
As vezes a gente encontra umas coisas engraçadas estudando estes exemplos.
Engraçado msm esses exemplos.... por isso é válido algumas vezes abrir o código fonte e ver como que é a implementação das coleções no java....
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 11:52:58
|
C?ar.Rodolfo
HelloWorld
![[Avatar]](/images/avatar/56c6d19ee947025ec19f9eb9b283f368.jpg)
Membro desde: 14/07/2009 08:36:51
Mensagens: 12
Offline
|
Ah vlw ^^
E quanto ao primeiro codigo?
Aki deu certim, estranhissimo XD
|
SCJP 6.0
Mata teu tempo e matará tua carreira... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 11:56:50
|
vmsb11
Java Ninja
Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline
|
estranho msm....
aqui o primeiro código funcionou no eclipse....
mas no java normal não funcionou....
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 12:06:21
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
pessoal, veja as linhas abaixo:
sao diferentes o cast que está sendo feito.
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 12:10:51
|
C?ar.Rodolfo
HelloWorld
![[Avatar]](/images/avatar/56c6d19ee947025ec19f9eb9b283f368.jpg)
Membro desde: 14/07/2009 08:36:51
Mensagens: 12
Offline
|
ArrayList<Number> lista1 = (ArrayList<Number> m.criarLista3();
Esse cast não deveria funcionar...
Pelo menos eu acho né ^^
|
SCJP 6.0
Mata teu tempo e matará tua carreira... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 12:23:19
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
C?ar.Rodolfo wrote:ArrayList<Number> lista1 = (ArrayList<Number>  m.criarLista3();
Esse cast não deveria funcionar...
Pelo menos eu acho né ^^
ele nao vai mesmo, se funcionasse eu poderia colocar qualquer coisa no meu array do tipo <Number> e isso nao eh permitido.
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 13:41:55
|
vmsb11
Java Ninja
Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline
|
Compilei esse código no console do java msm
E esse casting funcionou sim!!!!!!!!!....deu uma warning mas funcionou....
This message was edited 1 time. Last update was at 30/12/2009 13:42:42
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 15:37:15
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
e pq ele nao funcionaria? nao vejo nada de errado nele. vc tem um metodo que retornar um ou qualquer coisa que seja filho de Number.
aqui vc declaracou uma lista que vai receber o resultado o metodo que retorna um Number.
E depois vc adicionou um objeto Float no seu conjunto lista1 que está referenciado ao metodo que retorna
ele imprime com warnings pq a seguranca ai foi para o saco, ja que vc quebrou ela. isso ai eh o mesmo disso:
ja isso aqui nao compila:
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 15:46:36
|
vmsb11
Java Ninja
Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline
|
sim....isso ai eu ja entendi....
oque me deixou em dúvida é porq no retorno do método
retornei um array list de integer(até ai tudo bem, faz parte da regra de retorno que defini) mas na hora que eu faço casting
isso no meu entendimento está passando um array list de integer para number certo????
então oque eu entendi quando o tipo de retorno do método é <? extends ClasseX> eu posso fazer um casting de um subtipo para um supertipo na hora de chamar o método como eu fiz, está certo????
muito obrigado pela ajuda LPJava.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 15:58:54
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
vmsb11 wrote:sim....isso ai eu ja entendi....
oque me deixou em dúvida é porq no retorno do método
retornei um array list de integer(até ai tudo bem, faz parte da regra de retorno que defini) mas na hora que eu faço casting
isso no meu entendimento está passando um array list de integer para number certo????
então oque eu entendi quando o tipo de retorno do método é <? extends ClasseX> eu posso fazer um casting de um subtipo para um supertipo na hora de chamar o método como eu fiz, está certo????
muito obrigado pela ajuda LPJava.
qualquer um que passe no teste É-UM vc pode retornar quando se tem X extends Y.
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/12/2009 10:56:30
|
vmsb11
Java Ninja
Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline
|
entendi tudo LPJava....obrigado pela ajuda....
só tenho mais uma dúvida com relação a casting em genéricos....
quando eu faço:
mas quando eu declaro algo do tipo:
estou correto nisso?????....
|
|
|
 |
|
|