将我的db4o的一个对象与其他新对象进行比较

时间:2012-08-24 03:38:04

标签: java android db4o

我正在使用db4o和对象:

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

我收到一个新对象(有轨电车),我只想比较三个参数(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");
            } 

但不起作用:(

有人帮助我吗?

1 个答案:

答案 0 :(得分:0)

除非您已覆盖自定义模型类中的行为,否则.equals()的Java语言实现仅在两个参数实际上都是同一个对象(意味着相同的内存地址)时才返回true,而不一定只是等效。 According to the DB4O documentationObjectSet是一个集合,与自定义原型Tra不可能是同一个对象。所以你有两个问题:

  1. 您查询的值不正确。您可能希望执行更像result.getNext().equals(tram)的操作来访问集合中的实际模型对象(请记住可能有多个)。
  2. 如果x,y和z相同,则需要在模型类中使用equals()的自定义实现来表示它们是相同的。
  3. 第二个问题由以下内容处理:

    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