在下面的代码片段中,我不太清楚
的用处Product other = (Product)obj;
在我看来,这是多余的。我们可以删除这个,并将“return this.id == other.id”改为“return this.id == obj.id”吗?
public class Product{
String description;
double price;
int id;
public Product(String d, double p, int i){
description = d;
price = p;
id = i;
}
public boolean equals(Object obj){
if(!(obj instanceof Product){
return false;
}
Product other = (Product)obj;
return this.id == other.id;
}
public int hashcode(){
return id;
}
public String toString(){
return id + " "+description;
}
}
答案 0 :(得分:4)
您需要告诉语言将other
视为Product
。在您这样做之前,它只会将其视为Object
,它没有id
属性。
答案 1 :(得分:1)
如果未将Object obj强制转换为Product,则无法访问id字段。这就是为什么,前面有一张支票。如果它不是Product类型而不是return false ...
欢呼声
答案 2 :(得分:1)
Object
对象没有id
字段,因此您无法访问此类字段,这就是您将其转换为Product
的原因(也是有效的 - {{1 - 你访问铸造的obj的id)。此外,由于您要覆盖((Product)obj).id
方法,您必须获得与原始方法相同的类(equals
)的对象。
答案 3 :(得分:1)
它可能写成:
return this.id == ((Product)other).id;
如果您没有键入将其强制转换为Product,则该对象将没有属性“id”,因此您无法检查id是否相同。因此将对象类型转换为Product。
答案 4 :(得分:0)
这不起作用,因为您正在比较两个对象的属性。