我为什么需要演员?

时间:2011-07-21 21:00:13

标签: java casting

在下面的代码片段中,我不太清楚

的用处
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;
  } 
}

5 个答案:

答案 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)

这不起作用,因为您正在比较两个对象的属性。