4

我需要为 MyClas 制作 equals 函数。

public class MyClass
{
boolean equals(Object value)
  {
    if (... value is type of MyCLass ...)
      {
        return= ... check conditions...;
      } else return false;
  }
}

为此,我需要知道 Object 的值是否是 MyClass 的类型。怎么做?

4

7 回答 7

5

为了检查是否value是类型MyClass使用:

 if( value instanceof MyClass) 
于 2013-08-29T12:47:33.517 回答
1

Just a little IDE trick. Just to save up some time.

In eclipse you can do that by right click on the class file and select source --->generate hashCode() and equals() method , select all the attribute you need to compare and IDE will generate corresponding code for you

An excerpt

public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Employee other = (Employee) obj;
        if (firstName == null) {
            if (other.firstName != null)
                return false;
        } else if (!firstName.equals(other.firstName))
            return false;
        if (id != other.id)
            return false;
        if (lastName == null) {
            if (other.lastName != null)
                return false;
        } else if (!lastName.equals(other.lastName))
            return false;
        if (salary != other.salary)
            return false;
        return true;
    }
于 2013-08-29T12:54:41.213 回答
1

你可以做

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

    MyClass myClass = (MyClass) o;
    //Your logic

您也可以使用instanceof代替getClass()方法。

于 2013-08-29T12:50:40.553 回答
1

instanceof运算符用于确定。它是中缀,所以像这样使用它......

(value instanceof MyClass)
于 2013-08-29T12:47:53.383 回答
1
    public class MyClass
    {
       boolean equals(Object value)
      {
           if (value instanceof  MyCLass)
           {
              return= ... check conditions...;
           } else return false;
       }
   }
于 2013-08-29T12:48:39.500 回答
0
value instanceof ClassName

instanceof关键字检查, ClassNamevalue 的a在哪里subclass,如果是则返回true,否则返回false

于 2013-08-29T12:52:29.667 回答
0

虽然 RTTI(Real Time Type Identification)被一些人认为是代码异味,但有两种选择,一种是使用instanceof操作符:

if(value instanceof MyClass)

另一方面,您可以使用Class该类中的完整方法,即给定两个对象,您可以确定它们是否属于同一层次结构(比instanceofIMO 强大得多):

if(value.getClass().isAsignableFrom(getClass()))

this第二种方法在给定任何类型的对象的情况下确定 value 是否是当前类 (the ) 的相同类或超类/超接口。这是isAsignableFrom擅长的地方,因为instanceof您需要在编译时知道引用类型。

于 2013-08-29T13:00:07.653 回答