Чтобы избежать дублирования в коде, есть ли способ выделить в отдельный метод выбранный код?
class Builder
{
private final List< UnitIf > unit = new ArrayList<>();
private final List< TimeIf > time = new ArrayList<>();
public Builder withUnit( final UnitIf aUnit )
{
//Extract to method
if ( aUnit != null )
{
unit.add( aUnit );
}
return this;
//----------------
}
public Builder withTime( final TimeIf aTime )
{
//Extract to method
if ( aTime != null )
{
time.add( aTime );
}
return this;
//----------------
}
}
Моя цель — упростить код, устранив дублирование. Но части кода используют разные типы данных.
Добавить метод
public <T> Builder addIfNonNull(List<T> dst, T x)
{
if (x != null) {
dst.add(x);
}
return this;
}
и реализуй withUnit
лайк
public Builder withUnit( final UnitIf aUnit )
{
return addIfNonNull(unit, aUnit);
}
и изменить withTime
таким же образом.
Если вы не хотите, чтобы это был общий метод, просто опустите параметр типа T
и измените тип x
на Object
:
public Builder addIfNonNull(List dst, Object x)
{
if (x != null) {
dst.add(x);
}
return this;
}
Внутри компилятор Java скомпилирует List<T>
только в List
. Кажется, это называется "стирание шрифта".
Это очень хорошее решение для меня. Возможно ли какое-либо решение без универсальных типов?