Шаблон проектирования Builder может помочь. Рассмотрим следующий пример
public class StudentBuilder
{
private String _name;
private int _age = 14; // this has a default
private String _motto = ""; // most students don't have one
public StudentBuilder() { }
public Student buildStudent()
{
return new Student(_name, _age, _motto);
}
public StudentBuilder name(String _name)
{
this._name = _name;
return this;
}
public StudentBuilder age(int _age)
{
this._age = _age;
return this;
}
public StudentBuilder motto(String _motto)
{
this._motto = _motto;
return this;
}
}
. Это позволяет нам писать код, например
Student s1 = new StudentBuilder().name("Eli").buildStudent();
Student s2 = new StudentBuilder()
.name("Spicoli")
.age(16)
.motto("Aloha, Mr Hand")
.buildStudent();
. Если оставить обязательное поле (предположительно, имя требуется), то мы можем иметь конструктор Стьюдента выбросить исключение. И это позволяет нам иметь необязательные / необязательные аргументы без необходимости отслеживать какой-либо порядок аргументов, поскольку любой порядок этих вызовов будет работать одинаково хорошо.