Вот мысль, если вы беспокоитесь о:
1 / Забыть обновить большую серию операторов if для проверки равенства при добавлении / удалении поля.
2 / Производительность в методе equals ().
Попробуйте следующее:
a / Вернемся к использованию длинной последовательности операторов if в вашем методе equals ().
b / Имеет единственную функцию, которая содержит список полей (в массиве String) и которая сверяет этот список с реальностью (т.е. отраженными полями). Он выдаст исключение, если они не совпадают.
c / В вашем конструкторе для этого объекта необходимо выполнить синхронизированный однократный вызов этой функции (аналогично одноэлементному шаблону). Другими словами, если это первый объект, созданный этим классом, вызовите функцию проверки, описанную в пункте (b) выше.
Исключение сделает это сразу очевидным при запуске вашей программы, если вы не обновили свои операторы if, чтобы они соответствовали отраженным полям; затем вы исправляете операторы if и обновляете список полей из (b) выше.
Последующее построение объектов не выполнит эту проверку, и ваш метод equals () будет работать с максимально возможной скоростью.
Как ни старайся, я не смог найти никаких реальных проблем с этим подходом (в StackOverflow могут существовать большие умы) - есть дополнительная проверка условий для каждой конструкции объекта для однократного поведения, но это выглядит довольно незначительный.
Если вы попытаетесь сделать это достаточно усердно, вы все равно можете вывести свои операторы if из своего списка полей и отраженных полей, но исключение обеспечит соответствие вашего списка полей отраженным полям, и вы просто убедитесь, что обновили if- операторы и список полей одновременно.