如何修复发现bug的bug

时间:2015-04-19 11:07:18

标签: java find boolean

以下是我必须进行安全分析的代码,发现bug在这个方法中发现了一个bug。

 // Equals Method
    public boolean equals(Date dateIn){
       if(day == dateIn.day && month == dateIn.month && year == dateIn.year)
           return true;
        else
           return false;
    }

  

Find Bugs说:这个类定义了equals()的协变版本   方法,但继承了在中定义的正常equals(Object)方法   base java.lang.Object类。该类应该定义一个   boolean equals(Object)方法。

如果有人帮忙,我如何摆脱这个错误?

3 个答案:

答案 0 :(得分:4)

equals()应该以{{1​​}}作为参数,以匹配它覆盖的超级方法。使用注释Object强制执行此操作。

@Override

答案 1 :(得分:4)

您正在重载equals()方法。这意味着,可以调用两个实际函数。即,继承的equals(Object)和您的equals(Date)

重载表示有多个方法使用相同的名称但不同的类型的参数。

覆盖表示您正在更改超类(您继承的类)中定义的方法的实现。如果您不是直接从其他类继承,则默认情况下将从Object继承函数(例如,在这种情况下为equals(Object))。

@Override注释提供编译时检查和错误,如果没有这样的方法来覆盖。这种情况会发生在你的情况下(因为你做过载而不是覆盖)。

将您的代码更改为

// Equals Method
@Override
public boolean equals(Object object) {
   if(this == object) return true;
   if(!(object instanceof Date)) return false;

   Date dateIn = (Date) object;      
   if(day == dateIn.day && month == dateIn.month && year == dateIn.year)
       return true;
   else
       return false;
}

答案 2 :(得分:2)

如果此Date类是您编写的某个自定义Date类,则应更改equals方法以覆盖Object的等号:

@Override
public boolean equals(Object other)
{
   if (this == other)
       return true;
   if (!(other instanceof Date))
       return false;
   Date dateIn = (Date) other;
   if(day == dateIn.day && month == dateIn.month && year == dateIn.year)
       return true;
    else
       return false;
}

否则它将无法正常使用(因为HashMapHashSetArrayList等集合将调用Object'的默认实现s equals而不是调用您的实现。)