- ベストアンサー
取得した色の比較方法
Robot().getPixelColor(int,int)を利用して得た 2つの指定座標の色を比較し同じ色か違う色かで 処理を分岐したいのですが どうするとよろしいのでしょうか・・・? 大体やりたいことはこんな感じで・・・ Color cr1 , cr2; Robot r = new Robot(); cr1 = r.getPixelColor(x,y); cr2 = r.getPixelColor(x',y'); if( cr1 == cr2 ){} ←このままだとちゃんと処理されなかったので else{}
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
オブジェクト指向言語の勉強を始めて、 誰もがつまずく最初のハードルだと思います。 オブジェクトAとBが同一(のインスタンス)であるかどうかを調べるには A == B を使います。 また、オブジェクトを構成している内部変数値同士が等しいかどうかを 比較する場合には、 A.equals(B) を使えばうまくいく場合もあります。 今回のColorクラスの場合は、 if( cr1.equals(cr2) ){} を使用すれば所望の結果が得られるでしょう。 しかし、いつもこの方法が成功する保障はありません。 多くのユーザーレベルのクラスでは、equalsメソッドを 正しく実装している場合の方が少ないので注意が必要です。 また if( cr1.getRGB() == cr2.getRGB() ){} または、 if( cr1.getRed() == cr2.getRed() && cr1.getGreen() == cr2.getGreen() && cr1.getBlue() == cr2.getBlue() && cr1.getAlpha() == cr2.getAlpha() ){} を使うのもひとつの方法です。 これならば、Colorクラス内のequalsメソッドの具体的な実装に 依存せず、オブジェクトのなにを比較しているのかを誰が見ても 明らかですので、ひとつの優れた方法です。 例えば、 JFrame j1 = new JFrame(); JFrame j2 = new JFrame(); if( j1.equals(j2) ){} という他人の書いたソースを見たときに、 何を比較しているのか、具体的なJFrameクラスの実装を見ずして その意味を理解できる人はいないでしょう。
その他の回答 (2)
- koko_u_
- ベストアンサー率18% (459/2509)
Color クラスに実装されている equals() メソッドはクラス設計者が「同じ色」を 判断する時に使用してもらうことを意図して実装されているので、それが soushi0809 さんの希望する動作と合致しているのであれば、equals() を使うべきです。 例えば私の設計したクラス Hoge に equals() が実装されていない場合、 私は「同じである」ことを判断する基準を Hoge クラスに与えていない。ということです。 soushi0809 さんがそのようなクラスのインスタンスに対して「同じ」かどうかを判断する 必要に迫られた場合、Hoge クラスを直接使用するのではなく、クラスを継承するなどして equals() メソッドを追加するべきで、if 文の各所で判断ロジックを埋め込んではいけません。
- koko_u_
- ベストアンサー率18% (459/2509)
Color クラスのドキュメントを読んで下さい。
お礼
ご回答ありがとうございます。 equals()で考えていた動作ができました~^^* 同色を判断をしてくれるメソッドが用意されていたんですね・・・orz