以下是我必须进行安全分析的代码,发现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)方法。
如果有人帮忙,我如何摆脱这个错误?
答案 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;
}
否则它将无法正常使用(因为HashMap
,HashSet
,ArrayList
等集合将调用Object
'的默认实现s equals
而不是调用您的实现。)