2011-07-21 10 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

アイデアあなたがProductとしてotherを治療するための言語を伝える必要があることがあります。あなたがやるまでは、それだけでid属性を持っていないObject、としてそれを見ています。

1

オブジェクトobjをプロダクトにキャストしないと、idフィールドにアクセスできません。そのため、前にチェックがあります。それはfalseを返すよりも、タイプの製品ではない場合...

歓声

1

Objectオブジェクトがidフィールドを持っていないので、あなたは、このようなフィールドにアクセスすることはできません、あなたはProductにキャスト理由です(有効なも - ((Product)obj).id - あなたはキャストOBJのIDにアクセスします)。また、equalsメソッドをオーバーライドしたいので、元のメソッドと同じクラス(Object)のオブジェクトを取得する必要があります。あなたはタイプをいけない場合、オブジェクトは製品にキャストプロパティ「ID」を持っていないので、あなたはidがあることを確認することができませんでした

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

:同様のように記述される可能性があります

1

同じ。したがって、オブジェクトをProductに型キャストします。

0

これは、製品である2つのオブジェクトのidプロパティを比較しているため動作しません。

関連する問題