Я использую метод 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;
}