Если аргументы просто будут обрабатываться один раз, тогда я не думаю, что они принадлежат либо как аргументы конструктора, либо как состояние экземпляра.
Если, однако, служба сравнения собирается поддерживать какой-то алгоритм приостановки или вы хотите уведомить слушателей, когда состояние равенства двух каталогов изменяется на основе событий файловой системы или чего-то подобного. Тогда эти каталоги являются частью состояния экземпляра.
Ни в том, ни в другом случае конструктор не выполняет никакой работы, кроме инициализации экземпляра. В приведенном выше случае алгоритм управляется клиентом, как, например, итератор, или потоком прослушивания событий.
Я обычно стараюсь делать такие вещи:
Не храните состояние в экземпляре, если оно может быть передано в качестве аргументов сервисным методам.
Попробуйте спроектировать объект с неизменным состоянием.
Определение атрибутов, таких как те, которые используются в equals и hashcode, всегда должно быть неизменным.
Концептуально конструктор - это функция, отображающая представление объекта на объект, который он представляет.
По приведенному выше определению Integer.valueOf (1) на самом деле является скорее конструктором, чем новым Integer (1), потому что Integer.valueOf (1) == Integer.valueOf (1).
,
В любом случае это понятие также означает, что все аргументы cosntructor и только аргумент конструктора должны определять поведение объекта equals.