1

libGDX APIのVector2クラスを使用していますが、2つのベクトルが等しいかどうかを確認する場合は、次のことを行う必要があります。

Vector2 vectA = new Vector2(0, 1);
Vector2 vectB = new Vector2(1, 1);

if (vectA.x == vectB.x && vectA.y == vectB.y) {
   return true;
}

これは非常に不快であり、このシナリオでequals()メソッドを作成することを考えています。どちらを行うのが良いでしょう:

  1. equals(Vector2)メソッドを使用してVector2クラスのラッパーを作成する
  2. equals(Vector2、Vector2)メソッドを使用してEqualUtilクラスを作成する

前者は(私の意見では)見栄えが良くなりますが、もう一方ははるかにクリーンですが、少し単純化されている一方で、「良い」解決策ではない可能性があります。さまざまなアイデアも歓迎します。

4

4 に答える 4

2

はい、そうすべきです。

私の意見では、ラッパーを作成することをお勧めします(またhashCode()、新しい動作に一致するようにオーバーライドする必要があります)。

そうすることで、コードが読みやすくなるだけでなくHashSet、動作に依存する、またはその他のメソッドなどのコレクションを使用できるようになりますequals()

また、特定のオブジェクトに関するデータを提供するメソッドを作成しようとしているため、論理的にも意味があります。インスタンスメソッドとしてそれを実行するために、それを表示するためのより良い方法は何でしょうか。

于 2013-01-09T09:50:13.367 に答える
1

クラス内のメソッドequals()と同様に両方をオーバーライドして、一緒に行きます。hashCode()Vector2

ジョシュア・ブロックからアイテム-9

等しいをオーバーライドするときは常にhashCodeをオーバーライドします

編集:

45ページまで下にスクロールします。45 ページ:アイテム-9

于 2013-01-09T09:58:01.760 に答える
1
public interface CheckObject(){



  public abstract boolean and(CheckObject checkobject);
}



public abstract class AbstractObject()
    implements CheckObject
{

    public AbstractObject()
    {
    }

public abstract boolean and(CheckObject checkobject);
 protected void beforeObjectChecked(Object obj)
        throws IllegalArgumentException
    {
    }


public class EqualUtil extends AbstractObject {

private int point1;
private int point2;
}
protected EqualUtil(int point1,int point2){

this.point1=point1;
this.point1=point2;
}
public  boolean and(CheckObject checkobject){
    beforeObjectChecked(checkobject);
    return(this.getPoint1()==checkobject.getpoint1() && this.getPoint2()==checkobject.getpoint2()));

}


public int getPoint1() {
    return point1;
}

public void setPoint1(int point1) {
    this.point1 = point1;
}

public int getPoint2() {
    return point2;
}

public void setPoint2(int point2) {
    this.point2 = point2;
}

これでメインクラスから使用できます

于 2013-01-09T10:39:46.727 に答える
0

ラッパーは、元の設計者が何らかの理由でそれを含めなかった場合に、新しい動作を追加するための優れた理解しやすい方法です。元のAPIクラスがjava.lang.objectequalsメソッドを使用していることを考えると、ラッパーを作成することは私にとって賢明なオプションのようです。

于 2013-01-09T09:55:56.663 に答える