Question
Salut, j'ai un cours comme celui-ci
import java.util.ArrayList;
public class MobilePhone {
private String number;
private ArrayList<Message> messages;
public MobilePhone(String n) {
this.number = n;
this.messages = new ArrayList<Message>();
}
public String getNumber() {
return number;
}
public void setMessages(Message messages) {
this.messages.add(messages);
}
public ArrayList<Message> getMessages() {
return messages;
}
}
Et puis une classe Message
public class Message {
protected String sender;
protected String receiver;
protected String subject;
protected String bodyText;
protected int tipo;
protected Message() {
this.sender = this.receiver = this.subject =
this.bodyText = "";
}
protected Message(String s, String r, String sbj, String b, int t ) {
this.sender = s;
this.receiver = r;
this.subject = sbj;
this.bodyText = b;
this.tipo = t;
}
public String getSender() {
return sender;
}
public String getSubject() {
return subject;
}
public String getBodyText() {
return bodyText;
}
public int getTipo() {
return tipo;
}
}
Et une sous-classe
public class SMS extends Message {
static int maxBodySize = 160;
public void showMessage(){
System.out.println("SMS");
System.out.println("Subject: " + super.subject);
System.out.println("Text: " + super.bodyText);
}
}
Sur mon code j'ai ceci :
for (MobilePhone item : listaTelefones) {
for (Message item2: item.getMessages()){
((SMS) item2).showMessage();
}
}
Et ça me donne cette erreur :
Exception in thread "main" java.lang.ClassCastException: Message cannot be cast to SMS
Ne puis-je pas transférer le message vers SMS pour pouvoir utiliser la méthode SMS showMessage() ?
La solution
Certains des éléments de la liste sont de classe Message
mais pas de classe SMS
.Par conséquent, vous ne pouvez pas les envoyer en classe SMS
.
Ajoutez quelque chose comme ceci pour vous assurer que vous avez affaire à SMS
:
if (item2 instanceof SMS) {
((SMS) item2).showMessage();
}
Autres conseils
Vous devez vérifier si le Message
est du type SMS
avant de faire le casting, comme pas tous Messages
sont SMS
's.
if(item2 instanceof SMS) {
((SMS) item2).showMessage();
}
Cela garantira que vous n'essayez pas de diffuser des messages qui ne sont pas de SMS
tapez sur un SMS
taper.
Vous devez mettre un Message
dans votre liste.Soit:
Test de type :
if (item2 instanceof SMS) {
((SMS) item2).showMessage();
} else {
// ?
}
Si vous savez qu'il s'agit de SMS, tapez votre liste en SMS :
private ArrayList<SMS> messages;
public ArrayList<SMS> getMessages() {
return messages;
}