在Java中通过重写equals()比较对象对象和类对象
我试图重写接受对象作为输入的equals()方法 我在同一个包中有以下类在Java中通过重写equals()比较对象对象和类对象,java,overriding,equals,Java,Overriding,Equals,我试图重写接受对象作为输入的equals()方法 我在同一个包中有以下类 public class Herd{ int count; boolean exists; 在重写该方法的类中,我试图比较对象是否在位置、秩和它们是否是同一类中与变量匹配 public class Animal{ private Herd lot; private int rank; public boolean equals(Object animl) { if(this.
public class Herd{
int count;
boolean exists;
在重写该方法的类中,我试图比较对象是否在位置、秩和它们是否是同一类中与变量匹配
public class Animal{
private Herd lot;
private int rank;
public boolean equals(Object animl) {
if(this.getClass() == animl.getClass() && this.rank == animl.rank && this.lot == animl.**lot**) {
return true;
}
return false;
}
我知道为了比较,我会使用一个对象,它有所有这些参数,然而,在动物类中,它说
for animl.rank "rank cannot be resolved or is not a field"
for animl.lot "lot cannot be resolved or is not a field"
我尝试向下转换,即(…==(动物)animl.rank),但它给了我一个不兼容的操作数类型错误。我还尝试将等级转换为int,但这给了我上述问题
感谢您的帮助。您需要正确地投射您的
animl
对象:
public boolean equals(Object animl) {
if(this.getClass() == ((Animal) animl).getClass() && this.rank == ((Animal) animl).rank && this.lot == ((Animal) animl).lot) {
return true;
}
return false;
}
我认为如果您使用equals
而不是=
会更好:
public boolean equals(Object animl) {
if(this.getClass() == ((Animal) animl).getClass() && this.rank.equals( ((Animal) animl).rank) && this.lot.equals( ((Animal) animl).lot)) {
return true;
}
return false;
}
试试这个:
private Herd lot;
private int rank;
public boolean equals(Object animl) {
if(!(animl instanceof Animal))) {
return false;
}
Animal an = (Animal)animl;
return this.rank == an.rank && this.lot == an.lot;
}
这些属性可能需要getter。我没有编译或测试任何内容。类
Animal
中的方法equals
,应该像这样重写:
动物
类的字段,注意对畜群使用等于
公共类动物{
// ...
@凌驾
公共布尔等于(对象o){
如果(o==null | | this.getClass()!=o.getClass()){
返回false;
}
如果(this==o)返回true;
动物=(动物)o;
返回this.rank==animal.rank&&
this.lot!=null&&this.lot.equals(animal.lot);
}
}
类似地,可能需要在Herd
中重写方法equals
:
公共类{
// ...
@凌驾
公共布尔等于(对象o){
如果(o==null | | this.getClass()!=o.getClass()){
返回false;
}
如果(this==o)返回true;
牧群=(牧群)o;
返回this.count==herd.count&&this.exists==herd.exists;
}
}
比较不会以这种方式工作。
信息:
for animl.rank "rank cannot be resolved or is not a field"
for animl.lot "lot cannot be resolved or is not a field"
是正确的,因为对象类中没有此类属性。它们只存在于你的动物类中
也就是说,在进行实际比较之前,您需要显式地将对象强制转换为Animal。试试这个:
public class Animal{
private Herd lot;
private int rank;
public boolean equals(Object animl) {
Animal animal = (Animal) animl;
if(this.getClass() == animal.getClass() && this.rank == animal.rank && this.lot == animal.lot) {
return true;
}
return false;
}
另一方面,您可能需要对this.lot==animal.lot
((animal)animl).rank进行嵌套比较