这是我得到的错误:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to MenuComponent
以下是导致我麻烦的代码:
import java.util.ArrayList;
import java.util.Iterator;
public class Menu extends MenuComponent{
ArrayList menuComponents = new ArrayList();
String name;
String description;
public Menu() {
}
public Menu(String name, String description) {
super();
this.name = name;
this.description = description;
}
public void add(MenuComponent menuComponent) {
menuComponents.add(menuComponents);
}
public void remove(MenuComponent menuComponent) {
menuComponents.remove(menuComponents);
}
public MenuComponent getChild(int i) {
return (MenuComponent) menuComponents.get(i);
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public void print() {
System.out.println(getName());
System.out.print("---" + getDescription());
System.out.println("---");
Iterator iterator = menuComponents.iterator();
while(iterator.hasNext()) {
MenuComponent menuComponent = (MenuComponent) iterator.next();
menuComponent.print();
}
}
public Iterator createIterator() {
return new CompositeIterator(menuComponents.iterator());
}
}
导致错误的问题在于以下行:
MenuComponent menuComponent = (MenuComponent) iterator.next();
我试过弄它,但我没有运气。任何提示都非常感谢。
答案 0 :(得分:2)
使用ArrayList
的原始类型的缺点是,如果你犯了一个简单的错误就不会注意到。您应该将ArrayList
声明为ArrayList<MenuComponent> menuComponents
。然后你会注意到,在你的方法add(MenuComponent menuComponent)
中你总是将arrayList添加到arrayList中,因为你做了一个简单的拼写错误。
应该是menuComponents.add(menuComponent);
而不是menuComponents.add(menuComponents);
。您的删除方法也会出现同样的问题。
答案 1 :(得分:1)
问题在于:
public void add(MenuComponent menuComponent) {
menuComponents.add(menuComponents);//you add menuComponentS to the list!
}
public void remove(MenuComponent menuComponent) {
menuComponents.remove(menuComponents);//you remove menuComponentS to the list!
}
答案 2 :(得分:0)
问题是你现在在Arraylist中添加了Arraylists
public void add(MenuComponent menuComponent) {
menuComponents.add(menuComponents);
}
必须是
public void add(MenuComponent menuComponent) {
menuComponents.add(menuComponent);
}
你可以通过使用像ArrayList<MenuComponent> menuComponents = new ArrayList<>();
答案 3 :(得分:0)
首先,不要使用原始集合,如下所示:
ArrayList menuComponents = new ArrayList();
正确的方法是这样的:
ArrayList<MenuComponent> menuComponents = new ArrayList<MenuComponent>();
或更好:
List<MenuComponent> menuComponents = new ArrayList<MenuComponent>();
这将允许您消除演员表,如下所示:
return (MenuComponent) menuComponents.get(i);
而只是这样做:
return menuComponents.get(i);
这将允许Java告诉您是否在数组中存在错误的内容,如下所示:
menuComponents.add(menuComponents);
Java让你逃避这一点,因为它不知道menuComponents
中所谓的是什么。当你说new ArrayList<MenuComponent>()
时,你告诉Java ArrayList
只能有MenuComponent
个对象。然后,上面的代码将无法编译,因为Java知道你做错了什么并且可以告诉你。