PriorityQueue<String>pq=newPriorityQueue<String>();PriorityQueue<?>j=pq;// aqui funciona tudo bemj.offer("zuelaiê");/* aki da erro de compilação, mas se eu já falei qe pode ser ? qualquer objeto porque q ele não deixa eu botar uma string?*/
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.
J
javando
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
T
thingol
Você pôs <? extends Object>. Ponha <? extends String> , teste e veja se dá o mesmo resultado.
Dica: acho que deveria ser <? super String>
Vini_Fernandes
Caro javando, voce esta enganado, pois basta fazer j.offer(new Object()); e vc vera o mesmo erro de compilacao. Veja o codigo abaixo;
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
J
javando
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?)
Vini_Fernandes
Imagine o seguinte: Jaula jaulaLeao = new Jaula (); e Jaula jaulaBorboleta= new Jaula (); 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