Конструкторы могут быть перегружены, как и любой другой метод, и я знаю об этом факте. Из-за задачи я решил использовать абстрактный суперкласс с несколькими конструкторами:
Абстрактный суперкласс:
protected ListSortierer()
{
this( null, null );
}
protected ListSortierer( List<E> li )
{
this( li, null );
}
protected ListSortierer( Comparator<E> comp )
{
this( null, comp );
}
protected ListSortierer( List<E> li, Comparator<E> com )
{
this.original = Optional.ofNullable( li );
this.comp = Optional.ofNullable( com );
}
Для доступа к каждому из этих конструкторов мне понадобилось также несколько конструкторов в подклассе.
BubbleSort.java:
public ListBubbleSort()
{
super();
}
public ListBubbleSort( List<E> li )
{
super( li );
}
public ListBubbleSort( Comparator<E> com )
{
super( com );
}
public ListBubbleSort( List<E> li, Comparator<E> com )
{
super( li, com );
}
В этом случае каждый конструктор подкласса сразу вызывает конструктор суперкласса. Мне пришло в голову, что я могу снова обратиться к собственному конструктору и передать null
значения:
public ListBubbleSort()
{
this( null, null );
}
public ListBubbleSort( List<E> li )
{
this( li, null );
}
public ListBubbleSort( Comparator<E> com )
{
this( null, com );
}
public ListBubbleSort( List<E> li, Comparator<E> com )
{
super( li, com );
}
Это позволит мне опустить 3 перегруженных конструктора в абстрактном суперклассе, но будет обеспечивать, чтобы каждый подкласс следовал одному и тому же шаблону.
Мой вопрос: каков наилучший подход в случае согласованности? Обрабатывайте отсутствующие значения в абстрактном суперклассе или в подклассе? Имеет ли это значение для создания экземпляра или это просто вопрос мнения?