【问题标题】:is Object instance of MyClass是 MyClass 的 Object 实例
【发布时间】:2013-08-29 12:46:32
【问题描述】:

我需要为 MyClas 创建 equals 函数。

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

为此,我需要知道 Object 的值是否是 MyClass 的类型。如何制作?

【问题讨论】:

标签: java class equals instanceof


【解决方案1】:

为了检查value 是否属于MyClass 类型,请使用:

 if( value instanceof MyClass) 

【讨论】:

【解决方案2】:

instanceof 运算符用于确定这一点。是中缀,所以就这样用吧……

(value instanceof MyClass)

【讨论】:

    【解决方案3】:
        public class MyClass
        {
           boolean equals(Object value)
          {
               if (value instanceof  MyCLass)
               {
                  return= ... check conditions...;
               } else return false;
           }
       }
    

    【讨论】:

      【解决方案4】:

      你可以的

      @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() 方法。

      【讨论】:

        【解决方案5】:

        只是一个小小的 IDE 技巧。只是为了节省一些时间。

        在eclipse中,你可以通过右键单击类文件并选择源--->生成hashCode()和equals()方法,选择你需要比较的所有属性,IDE将为你生成相应的代码

        摘录

        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;
            }
        

        【讨论】:

          【解决方案6】:
          value instanceof ClassName
          

          instanceof 关键字检查,其中 value 是 ClassName 的 subclass,如果是则返回 true,否则返回 false

          【讨论】:

            【解决方案7】:

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

            if(value instanceof MyClass)
            

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

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

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

            【讨论】:

              猜你喜欢
              • 2021-04-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-13
              • 2016-04-02
              • 1970-01-01
              相关资源
              最近更新 更多