Быстрая точка.Вы упомянули, что ваши сеттеры на объекте являются частными.Если это так, то ваш объект не является неизменным (иначе сеттеры не могли бы существовать).В лучшем случае ваш объект только для чтения.
Для истинно неизменного объекта нет другого выбора, кроме как заставить конструктор принять все значения, необходимые для инициализации объекта.Лучший способ уменьшить количество параметров в конструкторе - это сгруппировать значения в более крупные объекты, которые затем передаются в конструктор.Хотя я бы не стал этого делать, если только значения не связаны логически.
Если вашему неизменяемому типу действительно нужны 40 значений, а в остальном они не связаны, лучший способ - создать конструктор с 40 значениями.Это или дальше сломать большой неизменный объект.