什么问题/陷阱,必须重写时,必须考虑equals和hashCode?
我遇到了一个有趣(而且非常令人沮丧)的问题,equals()今天的方法导致了我认为是经过良好测试的类崩溃并导致我花了很长时间才能追踪的错误.
为了完整起见,我没有使用IDE或调试器 - 只是老式的文本编辑器和System.out.时间非常有限,这是一个学校项目.
无论如何 -
我开发一个基本的购物车可能包含ArrayList的Book对象.为了贯彻落实addBook(),removeBook()以及hasBook()对车的方法,我想检查是否Book已在存在Cart.我走了 -
public boolean equals(Book b) {
... // More code here - null checks
if (b.getID() == this.getID()) return true;
else return false;
}
Run Code Online (Sandbox Code Playgroud)
一切都在测试中运行良好.我创建了6个对象并用数据填充它们.做了很多添加,删除,has()操作Cart,一切正常.我读到你可以拥有equals(TYPE var)或者equals(Object o) { (CAST) var }假设因为它有效,所以没关系太多.
然后我遇到了一个问题 - 我需要在Book类中创建一个只包含它的Book对象.不会输入任何其他数据.基本上如下:ID
public boolean hasBook(int i) {
Book b = new Book(i); …Run Code Online (Sandbox Code Playgroud)