我有一个使用ShoppingCart
个对象的课程ItemOrder
。
public class ShoppingCart extends ArrayList<ItemOrder> {
我有一个方法可以检查某个对象是否已经存在于数组列表中,如果是,则将index替换为new对象,如果不是则添加新对象。
public boolean add(ItemOrder order){
if (super.indexOf(order) != -1){ //ITEM ALREADY IN LIST, REPLACE
super.remove(super.indexOf(order));
super.set(super.indexOf(order), order);
}
else //ITEM NOT IN LIST, ADD
super.add(order);
return true; //TO SATISFY RETURN TYPE
}
当我编写方法时,我没有返回类型。我收到一个错误,建议我将返回类型设置为void,所以我这样做了。然后我得到另一个错误,返回类型必须是布尔值。我唯一的问题是方法本身并不是(至少对我而言)真/假的回报。我需要做的就是在ArrayList中添加/替换一个对象,而不是返回任何东西。
为什么这个方法需要一个布尔返回类型,我最后只是在return true;
投掷,或者我真的应该使用它吗?
答案 0 :(得分:7)
您的add
方法会覆盖实施ArrayList.add
的{{1}}
根据javadoc Collection.add
如果通过调用更改了集合,则返回true
请参阅:https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#add(E) 和https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#add(E)
答案 1 :(得分:0)
想象一下,你有以下课程:
public class Example extends ArrayList<String>{
public boolean add(String order){
if (super.indexOf(order) != -1){ //ITEM ALREADY IN LIST, REPLACE
super.remove(super.indexOf(order));
super.set(super.indexOf(order), order);
}
else //ITEM NOT IN LIST, ADD
super.add(order);
return true; //TO SATISFY RETURN TYPE
}
}
添加方法public boolean add(String order){..}
实际上是覆盖 ArrayList<String>
类中包含的默认方法。
使用IDE
您可以清楚地看到您还需要@Override
注释,因此它将是:
@Override
public boolean add(String order){
if (super.indexOf(order) != -1){ //ITEM ALREADY IN LIST, REPLACE
super.remove(super.indexOf(order));
super.set(super.indexOf(order), order);
}
else //ITEM NOT IN LIST, ADD
super.add(order);
return true; //TO SATISFY RETURN TYPE
}
您还可以查看JavaDoc(https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#add-int-E-)