java 中 重写equals方法的用处

<span style="font-size:18px;">以前只是在学习java的时候遇到了equals方法,对于重写equals有什么用是一点也不清楚,今天在项目在做比对的时候出了问题,
就试着重写了equals方法,结果就解决了问题。

在开发的时候,经常用到实体类,一般都会这么写</span><pre name="code" class="java">public class MsgDetailsBean {
	private String types, content, createtime;

	public String getTypes() {
		return types;
	}

	public void setTypes(String types) {
		this.types = types;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getCreatetime() {
		return createtime;
	}

	public void setCreatetime(String createtime) {
		this.createtime = createtime;
	}

	@Override
	public String toString() {
		return "MsgDetailsBean [types=" + types + ", content=" + content
				+ ", createtime=" + createtime + "]";
	}

}
然后项目中有个需求是列表中不能有重复的数据,也就是在刷新列表的时候如果数据有重复就不加载,我是这么写的

<pre name="code" class="java"><pre name="code" class="java">for (MsgDetailsBean bean : baseList.getList()) {
	if (!msgList.contains(bean)) {
		msgList.add(bean);
	}
}
结果发现<strong>if (!msgList.contains(bean)) </strong>总为true,有数据重复的时候contains方法也认为bean是不同的。
然后我仔细想了想contains比较的是object,而object比较是通过equals来返回true和false的,加上之前有了解过
equals(),所以我就试着重写了MegDetailsBean的equals()
<pre name="code" class="java">@Override
	public boolean equals(Object o) {
		if (o instanceof MsgDetailsBean) {
			MsgDetailsBean bean = (MsgDetailsBean) o;
			if (bean.getCreatetime().equals(createtime)) {
				return true;
			}
		}
		return false;
	}
我是先判断object是不是MsgDetailsBean的类型,如果是的话,就通过唯一的时间戳来判断是否相等,从而达到了自己
想要的效果。 这里相不相等的判断条件应该根据项目实际的需求来定
如果不重写的话,object基类的equals()
public boolean equals(Object o) {
        return this == o;
    }
他是比较实例的,而不断通过new的方式来获取的实例是不可能相等的。
mark。


 
 
 
 
 
 

 

你可能感兴趣的:(java,android,equals)