How can I cast an Object in an equals override method in Java?

I have the following code in a class used to simulate the IRS with employer filings in accordance with the filer. I am required to override the equals class but I keep getting the error saying that the methods I am trying to use cannot be found when called on the casted Object.

    @Override
public boolean equals(Object obj) {
    if ((this == null )|| (obj == null) || (this.getClass() != obj.getClass()))
        return false;
    if ((this.sameEmployer((Employer)obj))
    && (this.getEmployeeSSN() == (Employer)obj.getEmployeeSSN())
    && (this.getName() == (Employer)obj.getName())
    && (this.getEmployeeName() == (Employer)obj.getEmployeeName())
    && (this.getEmployeeWages() == (Employer)obj.getEmployeeWages()))
        return true;
    else
        return false;
}
Jon Skeet
people
quotationmark

For expressions like this:

(Employer)obj.getEmployeeSSN()

The . has higher precedence - "binds tighter" - than the cast. So it's closer to:

(Employer) (obj.getEmployeeSSN())

... whereas you want:

((Employer) obj).getEmployeeSSN()

in order to cast and then call the method. That's most easily done by casting in an earlier line:

public boolean equals(Object obj) {
    if (obj == null || this.getClass() != obj.getClass()) {
        return false;
    }
    Employee other = (Employee) obj;
    // Now use "other" in the rest of the code:
    return sameEmployer(other)
        && getEmployeeSSN() == other.getEmployeeSSN()
        ...;
}

Note that:

  • this can never be null, so you don't need to test it
  • You don't need nearly as many brackets as you had before
  • I'd strongly encourage you to use braces for all if blocks... you'd be surprised at how easy it is to end up with mistakes otherwise. (There are lots of SO questions which are basically due to that...)
  • Any time you have:

    if (foo) {
        return true;
    } else {
        return false;
    }
    

    you should simplify it to:

    return foo;
    

people

See more on this question at Stackoverflow