Другие ответы хорошо описывают, почему не рекомендуется использовать рефлексию.Я хочу добавить пример, используя более традиционное решение.
Вместо указания поля, которое используется для сравнения двух объектов, вы должны принять экземпляр Comparator
в качестве аргумента.Таким образом, клиент, который использует этот метод, может указать, как сравнивать два объекта.
protected <E> int compareFields(E o1, E o2, Comparator<E> comparator) {
return comparator.compare(o1, o2);
}
И пример вызова этой функции будет выглядеть так:
MyClass a = ...;
MyClass b = ...;
Comparator<MyClass> intFieldComparator = new Comparator<MyClass> {
public int compare(MyClass o1, MyClass o2) {
int field1 = o1.getIntField();
int field2 = o2.getIntField();
return field2 - field1;
}
};
compareFields(a, b, intFieldComparator);
Вы можете определитьразличные компараторы, если вы хотите сравнить объекты, используя несколько полей.