public interface Taggable<T extends Taggable<T>>
и изменить
(T) this
до
this
Итак:
default Taggable<T> tag(@NotNull String... tags) {
Collections.addAll(getTags(), tags);
return this;
}
Это то, что делает базовый класс Enum (для всех классов enum).
Свободный API, шаблон компоновщика, в общем, немного более многословен.
Однако преимущество не в том, чтобы иметь такие артефакты, как getTags
.
Делегирование реализации интерфейса тега / untag показалось бы лучше.