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
    }