atribuição de genericos  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
javando
JavaEvangelist

Membro desde: 04/12/2006 15:42:08
Mensagens: 409
Offline

gente, qual é o problema desse código?:



o código abaixio , mesma coisa:




o pior, é que na hora que eu faço a atribuiçao , não da erro, só da erro na hora de inserir..

q q eu faço? rsrs

Antonio Rafael Rodrigues
SCJP
SCWCD
SCBCD
site: http://www.antoniorafael.eti.br
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Uma PriorityQueue<E> só deixa inserir (ou seja, "offer") elementos da classe E, ou de alguma classe que estenda E.
Isso é para evitar que a PriorityQueue deixe de ser uma PriorityQueue de E ao conter elementos de outras classes que não sejam E ou que não estendam E.

Como E == String, e não existe nenhuma classe que possa estender String porque ela é uma "final class", então no seu caso você só pode declarar PriorityQueue <String> e nada mais.
[WWW]
javando
JavaEvangelist

Membro desde: 04/12/2006 15:42:08
Mensagens: 409
Offline

mas no caso que eu disse <? extends String> ele deveria aceitar alem das "filhas" de string, tambem a propria string não é?

ele não aceita nem a propria string

Antonio Rafael Rodrigues
SCJP
SCWCD
SCBCD
site: http://www.antoniorafael.eti.br
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Você pôs <? extends Object>. Ponha <? extends String> , teste e veja se dá o mesmo resultado.
Dica: acho que deveria ser <? super String>

This message was edited 1 time. Last update was at 02/02/2009 13:12:05

[WWW]
Vini Fernandes
Virtual Machine Man
[Avatar]

Membro desde: 20/01/2009 08:43:02
Mensagens: 523
Offline

Caro javando, voce esta enganado, pois basta fazer j.offer(new Object()); e vc vera o mesmo erro de compilacao. Veja o codigo abaixo;

O fato é que o wildcard "?" nao nos habilita a fazer


pois estamos falando de generics e animais é uma referencia que aponta para um generic do tipo Cao, mas animais NAO é do tipo Cao, por isso quando tentamos adicionar um novo elemento a lista obtemos um erro de compilacao!!! A utilidade esta no codigo acima como exemplo. Voces podem ver que se retirarmos o wildcard na declaracao do metodo alimentarAnimais() nao podemos alimetar todos os animais de uma unica vez. Imagine se alguem aqui fosse dono de um Petshop!!!

Abracao

What do you know about Java? Help me!
[MSN]
javando
JavaEvangelist

Membro desde: 04/12/2006 15:42:08
Mensagens: 409
Offline

aiai

orbigado pelas respostas ate o moment ...

cara .. quanto mais entendo .. mais me confundo ahua

eu to fazendo uma leitura errada então ...

se <? extends Animal> ... eu ACHAVA que dizia assim: posso colocar aki dentro qualquer coisa que extenda Animal..

mas pelo visto eu estou errrad ...

se não é assim, como devo interpretar a clausula <? extends Animal>

( naquele exemplo que eu dei, funcionou com o super String,mas porque não com o extends string?)

Antonio Rafael Rodrigues
SCJP
SCWCD
SCBCD
site: http://www.antoniorafael.eti.br
Vini Fernandes
Virtual Machine Man
[Avatar]

Membro desde: 20/01/2009 08:43:02
Mensagens: 523
Offline

Imagine o seguinte: Jaula<Leao> jaulaLeao = new Jaula<Leao> (); e Jaula<Borboleta> jaulaBorboleta= new Jaula<Borboleta> (); e voce fizesse jaulaLeao.add(new Borboleta()); É claro que as borboletas iriam escapar da jaula dos leoes.....rsrsr...... e por isso voce tem um erro de compilacao quando realiza a atribuicao jaulaLeao = jaulaBorboleta;

Quando fazemos Jaula<? extends Anima> jaula = jaulaLeao; voce diz ao compilador que jaula é uma referencia que apontara para qualquer GENERIC cujos elementos sejam subtipos de Animal. Mas imagine o problema que voce teria se fizesse: jaula.add(new Leao()) e depois jaula.add(new Zebra());.....kkkkkkkk

Abracao

What do you know about Java? Help me!
[MSN]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team