我正在使用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");
}
但不起作用:(
有人帮助我吗?
答案 0 :(得分:0)
除非您已覆盖自定义模型类中的行为,否则.equals()
的Java语言实现仅在两个参数实际上都是同一个对象(意味着相同的内存地址)时才返回true,而不一定只是等效。 According to the DB4O documentation,ObjectSet
是一个集合,与自定义原型Tra
不可能是同一个对象。所以你有两个问题:
result.getNext().equals(tram)
的操作来访问集合中的实际模型对象(请记住可能有多个)。equals()
的自定义实现来表示它们是相同的。第二个问题由以下内容处理:
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