相关疑难解决方法(0)

覆盖java equals()方法 - 不工作?

我遇到了一个有趣(而且非常令人沮丧)的问题,equals()今天的方法导致了我认为是经过良好测试的类崩溃并导致我花了很长时间才能追踪的错误.

为了完整起见,我没有使用IDE或调试器 - 只是老式的文本编辑器和System.out.时间非常有限,这是一个学校项目.

无论如何 -

我开发一个基本的购物车可能包含ArrayListBook对象.为了贯彻落实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)

java overriding equals

150
推荐指数
4
解决办法
25万
查看次数

有什么可以警告我反对type.equals(incompatibleType)吗?

是否有任何工具可以警告我不要使用以下类型的代码:

if ( someClass.equals( someString ))
Run Code Online (Sandbox Code Playgroud)

例如:

if ( myObject.getClass().equals( myClassName ))
Run Code Online (Sandbox Code Playgroud)

这样的事情是合法的Java(equals接受一个Object)但永远不会评估为true(一个类永远不能等于一个String)所以几乎肯定是一个bug.

我检查过Eclipse,FindBugs和PMD,但似乎没有人支持这个功能?

java static-analysis equals

11
推荐指数
1
解决办法
3592
查看次数

标签 统计

equals ×2

java ×2

overriding ×1

static-analysis ×1