重写equals方法以接受Object类中的双精度数。 Java的

时间:2015-02-20 20:50:45

标签: java object boolean double

在比较equals方法中的双精度时,我似乎遇到了问题。我收到一条错误消息,指出java.lang.ClassCastException: and java.lang.Double无法转换为Item。我没有正确投射吗?当我将演员表更改为Double时,我收到错误cannot find symbol - method getPrice().

public class Item implements Comparable
{
    private String name, category;
    private int quantity;
    private double price;

    public Item(String nam,String cate,int quant,double pric)
    {
        name = nam;
        category = cate;
        quantity = quant;
        price = pric;
    }

    public String toString()
    {
        return name + ", " + category + ", " + quantity + ", " + price;
    }

    public boolean equals(Object other)
    {
        if (price <= ((Item)other).getPrice()) // Error //
        return true;
        else
        return false;
    }

    public String getName()
    {
        return name;
    }

    public String getCategory()
    {
        return category;
    }

    public int getQuantity()
    {
        return quantity;
    }

    public double getPrice()
    {
        return  price;
    }

    public int compareTo(Object other)
    {
        int result;

        double otherPrice = ((Item)other).getPrice();
        String otherCategory = ((Item)other).getCategory();

        if (this.equals(otherPrice))
            result = category.compareTo(otherCategory);
        else
            result = price > otherPrice ? + 1 : price < otherPrice ? -1 : 0;
        return result;
    }
}

3 个答案:

答案 0 :(得分:0)

我假设其他传递给compareTo mehtod的是一个Item。

所以你有一个Item other和一个double otherPrice。

然后当您在if语句中调用this.equals(otherPrice)时,您正在执行Item.equals(Double)。

你应该传递一个项目。我想您要将double otherPrice = ((Item)other).getPrice();替换为ObjectotherPrice = ((Item)other);

看看你是否将双重传递给你尝试的双重方法并将双重投射到一个项目,这是不正确的。

答案 1 :(得分:0)

请注意Java中的equals方法以Object为参数。对于compareTo方法也是如此。这意味着参数可以是任何类型(String,List,Double ...)。我怀疑这就是这里发生的事情。

equals方法中,您将参数other转换为Item。但是如果other不是Item会怎样呢?

在使用instanceof运算符进行投射之前,您应该检查other的类型,如下所示:

public boolean equals(Object other) {
    if (!(other instanceof Item)) { //this also includes the case where other is null
        return false;
    }
    return price <= ((Item)other).getPrice();
}

最佳做法还是在this上添加一张支票,以免完全放弃:

public boolean equals(Object other) {
    if (this == other) {
        return true;
    }
    if (!(other instanceof Item)) {
        return false;
    }
    return price <= ((Item)other).getPrice();
}

考虑到这一点,您还应该检查compareTo方法。

答案 2 :(得分:0)

您的问题在于您的compareTo方法。您正在尝试将Item对象与double进行比较。 您的方法应如下所示:

public int compareTo(Object other) {
    int result;

    double otherPrice = ((Item) other).getPrice();
    String otherCategory = ((Item) other).getCategory();

    if (this.price==otherPrice)
        result = category.compareTo(otherCategory);
    else
        result = price > otherPrice ? +1 : price < otherPrice ? -1 : 0;
    return result;
}