Здесь может пригодиться шаблон Builder. Сегодня у меня была такая же проблема. где мне нужно, чтобы операции мутации Set возвращали мне ссылку на объект Set, чтобы я мог передать его конструктору суперкласса, чтобы они тоже могли продолжить добавление к тому же набору, в свою очередь создавая новый StringSetBuilder из Set, который является дочерним классом только что построен Класс построителя, который я написал, выглядит следующим образом (в моем случае это статический внутренний класс внешнего класса, но он также может быть и своим независимым классом):
public interface Builder<T> {
T build();
}
static class StringSetBuilder implements Builder<Set<String>> {
private final Set<String> set = new HashSet<>();
StringSetBuilder add(String pStr) {
set.add(pStr);
return this;
}
StringSetBuilder addAll(Set<String> pSet) {
set.addAll(pSet);
return this;
}
@Override
public Set<String> build() {
return set;
}
}
Обратите внимание на методы addAll()
и add()
, которые устанавливают возвращаемые аналоги Set.add()
и Set.addAll()
. Наконец обратите внимание на метод build()
, который возвращает ссылку на Set, который инкапсулирует построитель. Ниже показано, как использовать этот конструктор множеств:
class SomeChildClass extends ParentClass {
public SomeChildClass(String pStr) {
super(new StringSetBuilder().add(pStr).build());
}
}
class ParentClass {
public ParentClass(Set<String> pSet) {
super(new StringSetBuilder().addAll(pSet).add("my own str").build());
}
}