0

我将 db4o 与对象一起使用:

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

我收到一个新对象(电车),我只想比较三个参数(字符串 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。所以你有两个问题:

  1. 您查询的值不正确。您可能想做一些更喜欢result.getNext().equals(tram)访问集合中实际模型对象的事情(请记住,可能不止一个)。
  2. 你需要equals()在你的模型类中有一个自定义实现来表示如果 x、y 和 z 相同,它们是相等的。

第二个问题是这样处理的:

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;
        }
    }
}

高温高压

于 2012-08-24T03:57:31.917 回答