在比较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;
}
}
答案 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;
}