0

私はオブジェクトでdb4oを使用しています:

 public Tra(String x, int y, int z, int pos, Date de, Date de2)

新しいオブジェクト(tram)を受け取り、3つの引数(String x、int y、int z)のみを比較したいと思います。

他の引数にはまだ値がないためです。

私が使用しているもの:

Tra proto = new Tra(trat.getx(),trat.gety(),trat.getz(),0,null,null);
            ObjectSet result=db4oHelper.db().queryByExample(proto);
            if(result.equals(tram)){
                Log.d(TAG,"already exists");
            } 

しかし、動作しません:(

誰か助けてくれますか?

4

1 に答える 1

0

カスタムモデルクラスの動作をオーバーライドしない限り、のJava言語実装は.equals()、両方のパラメータが実際に同じオブジェクト(同じメモリアドレスを意味する)である場合にのみtrueを返し、必ずしも同等ではありません。DB4OのドキュメントによるとObjectSetはコレクションであり、カスタムプロトタイプと同じオブジェクトになる可能性はありませんTra。したがって、2つの問題があります。

  1. クエリしている値が正しくありません。コレクション内の実際のモデルオブジェクトにアクセスするようなことをしたいと思うresult.getNext().equals(tram)かもしれません(複数存在する可能性があることに注意してください)。
  2. equals()x、y、zが同じ場合に等しいことを示すために、モデルクラスにのカスタム実装が必要です。

次のようなものによって処理されている2番目の問題:

public class Tra {

    /* Existing Code */

    @Override
    public boolean equals(Object obj) {
        if (obj == null) return false;
        if (obj == this) return true;

        if (obj instanceof Tra) {
            Tra param = (Tra) obj;
            return this.x == param.x
                    && this.y == param.y
                    && this.z == param.z;
        }
    }
}

HTH

于 2012-08-24T03:57:31.917 に答える