我有两个在各方面都相同的对象(我知道) - 换句话说,所有属性都是相同的。
Object A
Object B
该类实现Apache反射是这样的:
public class Base<T> {
@Override
public boolean equals(Object obj) {
try {
if (!this.getClass().isInstance(obj)) {
return false;
}
if(EqualsBuilder.reflectionEquals(this, obj)){
return true;
}
return false;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
其中org.apache.commons.lang.builder.EqualsBuilder
是使用的命名空间。
但是,每当我使用这种相等的方法来比较它们时,它都会返回false。
对象是以下的实现:
public class Device extends Base<Object> implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private int _id = -1;
private long create_date = 0;
private long update_date = 0;
private int other_id = -1;
private String description = "";
private int configuration_id = -1;
private long sync_date = 0;
private Device_Info device_info = null;
public int get_id() {
return _id;
}
public void set_id(int _id) {
this._id = _id;
}
public long getCreate_date() {
return create_date;
}
public void setCreate_date(long create_date) {
this.create_date = create_date;
}
public long getUpdate_date() {
return update_date;
}
public void setUpdate_date(long update_date) {
this.update_date = update_date;
}
public int getOther_id() {
return other_id;
}
public void setOther_id(int other_id) {
this.other_id = other_id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getConfiguration_id() {
return configuration_id;
}
public void setConfiguration_id(int configuration_id) {
this.configuration_id = configuration_id;
}
public void setSync_date(long sync_date) {
this.sync_date = sync_date;
}
public long getSync_date() {
return sync_date;
}
/**
*
* @return
*/
public ContentValues getContentValues() {
// define an object to contain the object values
ContentValues values = new ContentValues();
try {
// set the values of each table column.
if(this.get_id() > 0){
values.put("_id", this.get_id());
}
values.put("create_date", this.getCreate_date());
values.put("update_date", this.getUpdate_date());
values.put("description", this.getDescription());
values.put("other_id", this.getOther_id());
values.put("configuration_id", this.getConfiguration_id());
values.put("sync_date", this.getSync_date());
return values;
} catch (Exception e) {
return values;
}
}
public Device_Info getDevice_info() {
return device_info;
}
public void setDevice_info(Device_Info device_info) {
this.device_info = device_info;
}
}
设备信息是另一个类似于设备类的类(实际上是扩展名),但只是具有更详细的属性。如前所述,这两个对象是相同的 - 我将每个属性手动设置为每个对象中的相同值,并通过单独检查每个属性进行验证。
此方法适用于更简单的对象,但我不明白为什么它在这个更复杂的对象上失败?复杂的我指的是一个具有另一个类作为属性的类。 Android ContentValues 不会出现影响成功/失败。