比较java中两个可能为空的值

比较java中两个可能为空的值,java,null,Java,Null,我有一个java类,类似这样: class MyClass { MyClass(Object obj) { m_Obj = obj } private Object m_Obj; } @Override public boolean equals( Object obj) { if (!(obj instanceof MyObject)) return false; MyObject other

我有一个java类,类似这样:

class MyClass {

    MyClass(Object obj) {

        m_Obj = obj
    }

    private Object m_Obj;
}
@Override
public boolean equals(
        Object obj) {

    if (!(obj instanceof MyObject))
        return false;

    MyObject other = (MyObject)obj;

    if ((m_Obj == null) &&
        (other.m_Obj == null)
        return true;

    if ((m_Obj == null) &&
        (other.m_Obj != null)
        return false;

    if ((m_Obj != null) &&
        (other.m_Obj == null)
        return false;


    return m_Obj.equals(other.m_Obj);
}
因为m_Obj可以为null,所以我的equals方法必须如下所示:

class MyClass {

    MyClass(Object obj) {

        m_Obj = obj
    }

    private Object m_Obj;
}
@Override
public boolean equals(
        Object obj) {

    if (!(obj instanceof MyObject))
        return false;

    MyObject other = (MyObject)obj;

    if ((m_Obj == null) &&
        (other.m_Obj == null)
        return true;

    if ((m_Obj == null) &&
        (other.m_Obj != null)
        return false;

    if ((m_Obj != null) &&
        (other.m_Obj == null)
        return false;


    return m_Obj.equals(other.m_Obj);
}
当我有多个类成员,这些成员可能是空的,也可能不是空的时,equals函数就变成了一个漫长的过程。我可以编写自己的函数:

public boolean equals(
        Object a,
        Object b) {

    if ((a == null) &&
        (b == null)
        return true;

    if ((a == null) &&
        (b != null)
        return false;

    if ((a != null) &&
        (b == null)
        return false;


    return a.equals(b);
}

我想知道是否有人已经在java/apache库中这样做了?

是的,因为java SE 7有一个标准API:


是的,因为Java SE 7对此有一个标准API:

以下是我的答案:()

包tjacobs.util;
/**
*PrimaryKey的原因是使重写equals、hashCode和compareTo变得更简单和更容易
*实现以使它们在数据对象类中彼此一致。
*@作者汤姆·雅各布斯
*
*@param
*/
公共接口主密钥{
公共对象[]getPrimaryKey();
公共布尔等于(T obj);
公共int hashCode();
公共接口CompariablePrimaryKey扩展了Compariable,PrimaryKey{
@抑制警告(“未选中”)
公共可比[]getPrimaryKey();
}
公共静态类Impl{
@抑制警告(“未选中”)
公共静态最终布尔值equalsImpl(PrimaryKey键1,PrimaryKey键2){
对象[]数据1=key1.getPrimaryKey();
对象[]数据2=key2.getPrimaryKey();
//不要检查长度是否相等-让它作为异常抛出
试一试{
对于(int i=0;i以下是我的答案:()

包tjacobs.util;
/**
*PrimaryKey的原因是使重写equals、hashCode和compareTo变得更简单和更容易
*实现以使它们在数据对象类中彼此一致。
*@作者汤姆·雅各布斯
*
*@param
*/
公共接口主密钥{
公共对象[]getPrimaryKey();
公共布尔等于(T obj);
公共int hashCode();
公共接口CompariablePrimaryKey扩展了Compariable,PrimaryKey{
@抑制警告(“未选中”)
公共可比[]getPrimaryKey();
}
公共静态类Impl{
@抑制警告(“未选中”)
公共静态最终布尔值equalsImpl(PrimaryKey键1,PrimaryKey键2){
对象[]数据1=key1.getPrimaryKey();
对象[]数据2=key2.getPrimaryKey();
//不要检查长度是否相等-让它作为异常抛出
试一试{
对于(int i=0;i