Java向下广播

Java向下广播,java,downcast,Java,Downcast,嗨,我有一节这样的课 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<Mess

嗨,我有一节这样的课

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 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();
         }
    }
这给了我一个错误:

线程主java.lang.ClassCastException中出现异常:无法将消息转换为SMS


我不能将消息向下广播到SMS以便使用SMS showMessage方法吗?

列表中的某些项目属于类别消息,但不属于类别SMS。因此,你不能把它们投到短信类中

添加以下内容以确保您正在处理SMS:


列表中的某些项目属于类别消息,但不属于类别SMS。因此,你不能把它们投到短信类中

添加以下内容以确保您正在处理SMS:

您需要检查消息是否为SMS类型,然后再进行转换,因为并非所有消息都是SMS

这将确保您不会尝试将非SMS类型的消息强制转换为SMS类型。

在执行强制转换之前,您需要检查消息是否为SMS类型,因为并非所有消息都是SMS

这将确保您不会尝试将非SMS类型的消息强制转换为SMS类型。

您必须将消息放入列表中。要么:

型式试验: 如果您知道它们是短信息,请在短信息中键入您的列表: 您必须在列表中添加一条消息。要么:

型式试验: 如果您知道它们是短信息,请在短信息中键入您的列表:
    for (MobilePhone item : listaTelefones) {
         for (Message item2: item.getMessages()){
             ((SMS) item2).showMessage();
         }
    }
if (item2 instanceof SMS) {
    ((SMS) item2).showMessage();
}
if(item2 instanceof SMS) {
    ((SMS) item2).showMessage();
}
if (item2 instanceof SMS) {
    ((SMS) item2).showMessage();
} else {
    // ?
}
private ArrayList<SMS> messages;

public ArrayList<SMS> getMessages() {
    return messages;
}