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
paulovr
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() =]]
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
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?
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?
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.
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.