1

こんにちはこのようなクラスが1つあります

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;
    }

}

そして、メッセージクラス

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;
    }


}

そして1つのサブクラス

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);
    }
}

私のコードにはこれがあります:

    for (MobilePhone item : listaTelefones) {
         for (Message item2: item.getMessages()){
             ((SMS) item2).showMessage();
         }
    }

そしてそれは私にこのエラーを与えます:

Exception in thread "main" java.lang.ClassCastException: Message cannot be cast to SMS

SMSにメッセージをダウンキャストしてSMSのshowMessage()メソッドを使用することはできませんか?

4

3 に答える 3

2

リスト内のいくつかの項目はクラスのものですが、クラスのものではありMessageませんSMS。したがって、それらをクラスにキャストすることはできませんSMS

あなたが扱っていることを確実にするためにこのようなものを追加してくださいSMS

if (item2 instanceof SMS) {
    ((SMS) item2).showMessage();
}
于 2012-01-23T12:08:46.703 に答える
2

すべてが'であるとは限らないため、キャストを行う前に、Messageがタイプであるかどうかを確認する必要があります。SMSMessagesSMS

if(item2 instanceof SMS) {
    ((SMS) item2).showMessage();
}

SMSこれにより、タイプではないメッセージをタイプにキャストしようとしないようになりますSMS

于 2012-01-23T12:10:05.050 に答える
1

Messageあなたはあなたのリストに入れているに違いありません。また:

タイプのテスト:

if (item2 instanceof SMS) {
    ((SMS) item2).showMessage();
} else {
    // ?
}

それらがSMSであることがわかっている場合は、リストをSMSに入力します。

private ArrayList<SMS> messages;

public ArrayList<SMS> getMessages() {
    return messages;
}
于 2012-01-23T12:11:36.160 に答える