Первое решение напрямую вводит значения с отражением (в основном JVM возьмет ваш объект и вручную установит значение).
Второе решение использует конструктор, то есть параметр является обязательным.Кроме того, у вас есть время поиграть с указанным значением, прежде чем присваивать его своему атрибуту.(обратите внимание, что конструктор также будет вызываться с помощью отражения).
Другой способ - использовать установщик, на этот раз вызывается метод для установки значения, чтобы вы могли поиграть с ним перед его установкой, но этоне является обязательным (так как он не является частью конструктора).
Что касается рекомендуемого, я не уверен, что на самом деле существует одно «официально рекомендованное», но я склонен использовать конструктор только для обязательных полей иустановка сеттера для необязательных полей.Но, насколько я знаю, это в основном зависит от команды, с которой вы работаете, или от вашего вкуса.