Оба решения в порядке. Но есть методология / шаблон «строителя», который может оказаться полезным.
После моего опубликованного комментария я представляю пример Строителя как внутренний класс
Widget x = new Widget.Builder("1", 1.0).
model("1").build();
Widget y = new Widget.Builder("2", 2.0).
model("2").manufacturer("222").
serialNumber("12345").build();
Widget z = new Widget.Builder("3", 4.0).
manufacturer("333").
serialNumber("54321").build();
Основная идея шаблона состоит в том, чтобы ограничить количество параметров конструктора и избежать использования методов установки. Конструкторы со слишком большим количеством параметров, особенно необязательных, уродливы и сложны в использовании. Несколько конструкторов для разных режимов сбивают с толку. Методы установки добавляют беспорядок и заставляют объект быть изменчивым. Вот класс скелета по шаблону -
public class Widget {
public static class Builder {
public Builder(String name, double price) { ... }
public Widget build() { ... }
public Builder manufacturer(String value) { ... }
public Builder serialNumber(String value) { ... }
public Builder model(String value) { ... }
}
private Widget(Builder builder) { ... }
}