Incompatible types, why?

6 respostas
P

public void showLots() { Iterator it = lots.iterator(); while(it.hasNext()) { Lot lot = it.next(); //-----4.12 casting Lot System.out.println(lot.getNumber() + ": " + lot.getDescription()); // Include any details of a highest bid. Bid highestBid = lot.getHighestBid(); if(highestBid != null) { System.out.println(" Bid: " + highestBid.getValue()); } else { System.out.println(" (No bid)"); } } }

Na primeira linha do while tirei o cast pra testar e deu erro de incompatibilidade de tipo.
Why?

6 Respostas

Deh

porque precisa de um cast…
qiuando você trabalha com uma coleção não-genérica, ela aceita somente objetos, ou seja, tudo que sai dela é java.lang.Object, e lógico você precisa fazer um casting sempre que for pegar algum valor dela!

=D

P

Nao entendi pois se percorrer a colecção com o iterator:

import java.util.Iterator; ... Iterator it = notes.iterator(); while(it.hasNext()){ System.out.println(it.next()); }

Onde está o cast aqui? Porque não precisa de cast aqui e no outro caso precisamos?

Deh

quando você ta usando o it.next();
creio eu que você vai estar usando o toString();

mas quando você vai atribuir a alguma variavel é outra história!

System.out.println(it.next());

você só escreve o valor com o toString() e só.

quando você vai atribuir

String nome = it.next() <-- erro de compilação! você não pode colocar um java.lang.Object dentro de uma String sem um casting explicito… mesmo você sabendo que tem tem uma String no it.next() =]]

ramilani12

Na linha

Lot lot = it.next();
   //alteracao
      Lot lot = (Lot) it.next();

Prq na verdade qndo vc joga obejtos na collection como dito peloDeh aceita Object, e vc esta guardando a referencia desse objeto por isso necessita do Casting

paulovr:
public void showLots() { Iterator it = lots.iterator(); while(it.hasNext()) { Lot lot = it.next(); //-----4.12 casting Lot System.out.println(lot.getNumber() + ": " + lot.getDescription()); // Include any details of a highest bid. Bid highestBid = lot.getHighestBid(); if(highestBid != null) { System.out.println(" Bid: " + highestBid.getValue()); } else { System.out.println(" (No bid)"); } } }

Na primeira linha do while tirei o cast pra testar e deu erro de incompatibilidade de tipo.
Why?

P

sim entendi q tenho de fazer cast pois uma colecçao pode ser de varios tipos, mas pq tenho de fazer o cast de Lost, pq? tenho de dizer q a coleccao é de tipo Lost, certo? pq?

Sami_Koivu

paulovr:
sim entendi q tenho de fazer cast pois uma colecçao pode ser de varios tipos, mas pq tenho de fazer o cast de Lost, pq? tenho de dizer q a coleccao é de tipo Lost, certo? pq?

Lost ou Lot? :wink:

Por quê? Porque supostamente a coleção contém objetos deste tipo (Lot).

Caso contrario, você poderia fazer o cast para outro tipo. Mas daí você não pode mais guardar isto numa referencia do tipo Lot. E nem chamar métodos do tipo Lot.

public void showLots()
     {
         Iterator it = lots.iterator();
         while(it.hasNext()) {
             String str = (String) it.next();
             ...

Funciona, pelo menos para o compilador. Mas se os objetos contidos na coleção não são do tipo java.lang.String vai resultar numa ClassCastException quando você roda essa linha.

[]s,
Sami

Criado 18 de outubro de 2006
Ultima resposta 18 de out. de 2006
Respostas 6
Participantes 4