Guava Objects.equal - PullRequest
       12

Guava Objects.equal

0 голосов
/ 20 августа 2011

Я использую метод Guava Objects.equal.В соответствии с API Guava этот метод Objects.equal возвращает true, если a и b оба имеют значение null.Я не уверен, хочу ли я такое поведение на пустых полях для ключевых бизнес-полей.Поэтому я думаю, что null! = Null для полей, участвующих в методе equals.Каждое поле важно для определения равенства.Я также использую Hibernate, поэтому, если я пишу «равно», как показано ниже, это выглядит немного необычно.

Видите ли вы что-то не так с методом ниже равно?

class Xyz
    ...............
    private Attr attr; //This is a business Key!
    private Attr2 attr2;// This is NOT a business key!

    @Override
    public boolean equals(Object obj)
    {
    return this == obj || (MyUtil.preEquals(this, obj) && xyzEquals(obj));
    }

    private boolean xyzEquals(Object obj)
    {
        final Xyz other = (Xyz) obj;

        // I want below check to make sure none of the business keys are NOT null
        if(getAttr()==null||other.getAttr()==null) return false;

        // I don't need below check since that attribute is not one of my business keys.
        // Still it participates in determining equality.
        // But it's not going to return false if either is null
        // if(getAttr2()==null||other.getAttr2()==null) return false;


        return Objects.equal(getAttr(), other.getAttr())
         && Objects.equal(getAttr2(), other.getAttr2());
    }
    ..............
    MyUtil class
    ..............
    public static boolean preEquals( Object thiz, Object obj )
    {
            if ( obj == null  || !thiz.getClass().isAssignableFrom(obj.getClass()))
            {
                return false;
            }
            return true;
        } 
...