一句话博客:
自定义类的容器的contains函数需要重载equals函数,格式需要@Override和equals的参数列表中应该是Object类的。
具体分析过程
在完成mit实验作业的时候,add函数需要遍历list 找寻相同的对象。
对Vertex类的equals函数定义如下:
// methods
public boolean equals(Vertex that) {
return vertexName.equals(that.vertexName);
}
在添加add函数的时候,需要,判断是否已经存在。
然而在调用contains函数的时候,Junit检测add函数出错。最后确定是contains函数判断的问题。
然后放弃contains,遍历整个list,进行逐个的equals的检查,才通过了测试。
埋下了这个坑,所以写这个博客为了填坑。。。
可以清楚的看到,他调用了equals函数,而我们之前写的equals函数本身是正确的,(如上)但并没有被contains调用。
所以应当是override没有完成,添加了@Override函数之后,编译错误,只提示需要移除annotation就是@Override。
一阵百度之后,看到一个在参数中,将类型变为Object类,然后在函数体内强制类型转换进行处理。
然后contains函数终于好使了!相同的indexOf函数也好使了,赶紧回去修改所有的遍历。。代码变得更精简!