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() ?

Était-ce utile?

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top