你有一个这样的课程
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;
}
}
然后是一个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;
}
}
还有一个子类
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()方法吗?
答案 0 :(得分:2)
列表中的某些项目属于班级Message
,但不属于班级SMS
。因此,您无法将它们投射到课程SMS
。
添加类似内容以确保您正在处理SMS
:
if (item2 instanceof SMS) {
((SMS) item2).showMessage();
}
答案 1 :(得分:2)
您需要先检查Message
类型SMS
是否属于Messages
,因为并非所有SMS
都是if(item2 instanceof SMS) {
((SMS) item2).showMessage();
}
。
SMS
这将确保您不会尝试将非SMS
类型的邮件投射到{{1}}类型。
答案 2 :(得分:1)
您必须在列表中添加Message
。之一:
if (item2 instanceof SMS) {
((SMS) item2).showMessage();
} else {
// ?
}
private ArrayList<SMS> messages;
public ArrayList<SMS> getMessages() {
return messages;
}