2011-07-21 103 views
2

在下面的代碼片段,我不看好的爲什麼我需要施放?

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

你爲什麼不試試看看會發生什麼? – skaffman

回答

4

的想法不存在,你需要告訴對待otherProduct的語言。在你做之前,它只會將其視爲Object,它不具有id屬性。

1

如果您不將Object obj轉換爲產品,則無法訪問id字段。這就是爲什麼,前面有一張支票。如果是類型產品比返回false ...

歡呼

1

一個Object對象不具有id場,所以你不能訪問這樣的領域,這就是爲什麼你將它轉換爲Product(也適用 - ((Product)obj).id - 您訪問鑄造obj的ID)。此外,由於您想覆蓋equals方法,因此您必須獲取與原始方法相同類別的對象(Object)。

1

那還不如寫爲:

return this.id == ((Product)other).id;

的對象根本不具有屬性「ID」,如果你不類型它轉換爲產品,因此,你可以不檢查ID是相同。因此將對象類型化爲Product。

0

這不起作用,因爲您正在比較兩個產品對象的id屬性。