Java 为什么需要布尔返回类型?
我有一个类Java 为什么需要布尔返回类型?,java,return,boolean,Java,Return,Boolean,我有一个类ShoppingCart,它使用ItemOrder对象 public class ShoppingCart extends ArrayList<ItemOrder> { 当我编写该方法时,我没有返回类型。我收到一个错误,建议我将返回类型设置为void,所以我这样做了。然后我得到了另一个错误,返回类型必须是布尔型。我唯一的问题是,方法本身并不是固有的(至少对我来说)真/假返回。我只需要在ArrayList中添加/替换一个对象,而不返回任何内容 为什么这个方法需要一个布尔返回
ShoppingCart
,它使用ItemOrder
对象
public class ShoppingCart extends ArrayList<ItemOrder> {
当我编写该方法时,我没有返回类型。我收到一个错误,建议我将返回类型设置为void,所以我这样做了。然后我得到了另一个错误,返回类型必须是布尔型。我唯一的问题是,方法本身并不是固有的(至少对我来说)真/假返回。我只需要在ArrayList中添加/替换一个对象,而不返回任何内容
为什么这个方法需要一个布尔返回类型,而我简单地抛出
returntrue是否安全代码>在最后,还是我真的应该使用它 您的add
方法覆盖实现集合的ArrayList.add
。add
根据javadoc集合添加
如果调用导致集合更改,则返回true
见:
和想象一下你有下面的课程:
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
}
}
另外,您还可以查看JavaDoc()您正在重写List.add(),并使它做一些不尊重List.add()契约的事情。不要那样做。不要扩展ArrayList。相反,使用列表作为ShoppingCart的字段。购物车不是列表。它可以使用一个列表来存储它的元素,但不是你的问题,而是如果你做了super.remove(super.indexOf(order))
那么下面语句中的indexOf是什么super.set(super.indexOf(order),order)代码>?澄清一下:您正在重写该方法,因为它与具有相同的名称和参数类型。您试图给它一个不同的返回类型,但Java在决定一个方法是否重写另一个方法时不会查看返回类型。@JeffreyDilley,如果您真的想添加或重写并且确实需要您当前正在做的事情(继承自ArrayList
,而不是像JBNizet所说的变量List listName
),而不仅仅是删除super。删除部分。如果需要不允许重复的列表,请尝试使用。如果保留原始插入顺序很重要,请使用。它比List.indexOf()
logic快得多,而且您可以免费获得全部功能。不需要重写。这就是我从youtube学习如何编码得到的,哈哈。那么我需要包括重写注释吗??代码在没有它的情况下运行良好。另外,我简单地抛出return true是否安全?不,如果没有@override
注释,您会很好,但出于可维护性的目的,最好将其包含在内。对于返回true
那么它现在就可以为您工作了,但是如果您的代码被一个需要ArrayList
的类使用,并且它在add()
失败或返回false
时做了一些事情,那么该类就会崩溃。因此,通常在重写时,您必须遵守被重写的方法约定:如果一切正常,则返回true,否则返回false。
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
}
}
@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
}