我需要为 MyClas 制作 equals 函数。
public class MyClass
{
boolean equals(Object value)
{
if (... value is type of MyCLass ...)
{
return= ... check conditions...;
} else return false;
}
}
为此,我需要知道 Object 的值是否是 MyClass 的类型。怎么做?
我需要为 MyClas 制作 equals 函数。
public class MyClass
{
boolean equals(Object value)
{
if (... value is type of MyCLass ...)
{
return= ... check conditions...;
} else return false;
}
}
为此,我需要知道 Object 的值是否是 MyClass 的类型。怎么做?
为了检查是否value
是类型MyClass
使用:
if( value instanceof MyClass)
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;
}
你可以做
@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()
方法。
instanceof
运算符用于确定。它是中缀,所以像这样使用它......
(value instanceof MyClass)
public class MyClass
{
boolean equals(Object value)
{
if (value instanceof MyCLass)
{
return= ... check conditions...;
} else return false;
}
}
value instanceof ClassName
instanceof
关键字检查, ClassNamevalue
的a在哪里subclass
,如果是则返回true,否则返回false
虽然 RTTI(Real Time Type Identification)被一些人认为是代码异味,但有两种选择,一种是使用instanceof
操作符:
if(value instanceof MyClass)
另一方面,您可以使用Class
该类中的完整方法,即给定两个对象,您可以确定它们是否属于同一层次结构(比instanceof
IMO 强大得多):
if(value.getClass().isAsignableFrom(getClass()))
this
第二种方法在给定任何类型的对象的情况下确定 value 是否是当前类 (the ) 的相同类或超类/超接口。这是isAsignableFrom
擅长的地方,因为instanceof
您需要在编译时知道引用类型。