Java EQ\u SELF\u USE\u OBJECT Bug

Java EQ\u SELF\u USE\u OBJECT Bug,java,methods,equals,Java,Methods,Equals,我正在写一个equals方法,在这个方法中,如果两个名字的名字、中间名和姓氏相同,那么它们就被认为是相等的。然而,我不断地得到错误 此类定义了equals()方法的协变版本,但 继承基类中定义的normal equals(Object)方法 对象类。该类可能应该定义一个布尔值 等于(对象)方法。” 当我把它改为Object other作为参数时,我得到一个“no-this-method”错误 通过使用不同的参数来键入对象,可以重载方法equals。以下内容应该适合您 @Override publ

我正在写一个equals方法,在这个方法中,如果两个名字的名字、中间名和姓氏相同,那么它们就被认为是相等的。然而,我不断地得到错误

此类定义了equals()方法的协变版本,但 继承基类中定义的normal equals(Object)方法 对象类。该类可能应该定义一个布尔值 等于(对象)方法。”

当我把它改为Object other作为参数时,我得到一个“no-this-method”错误


通过使用不同的参数来键入
对象
,可以重载方法equals。以下内容应该适合您

@Override
public boolean equals(Object object) {
    if(this == object) return true;
    if(!(object instanceof Name)) return false;

    Name other = (Name) object;
    boolean sameFirstName = firstName.equals(other.firstName);
    boolean sameMiddleName = middleName.equals(other.middleName);
    boolean sameLastName = lastName.equals(other.lastName);
    if (sameFirstName && sameMiddleName && sameLastName) {
        return true;
    }
    return false;
}  

必须对名为“其他”的参数使用对象类型。然后做实例的检查和铸造。请参考这个

如果使用Java 7或更高版本,则可以使用以下代码:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return Objects.equals(firstName, person.firstName) &&
           Objects.equals(middleName, person.middleName) &&
           Objects.equals(lastName, person.lastName);
}
IDE中有一个自动生成的equals:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    Person person = (Person) o;

    return !(firstName != null ? !firstName.equals(person.firstName) : person.firstName != null) 
                && !(middleName != null ? !middleName.equals(person.middleName) : person.middleName != null) 
                && !(lastName != null ? !lastName.equals(person.lastName) : person.lastName != null);

}

请注意,还应该有NPE检查。

项目描述中说要命名它equals@neoiajr12没问题。很高兴我帮了忙。:)如果这个或任何答案已经解决了你的问题,请考虑通过点击复选标记接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    Person person = (Person) o;

    return !(firstName != null ? !firstName.equals(person.firstName) : person.firstName != null) 
                && !(middleName != null ? !middleName.equals(person.middleName) : person.middleName != null) 
                && !(lastName != null ? !lastName.equals(person.lastName) : person.lastName != null);

}