Одним из решений является создание пользовательской оболочки для StringBuilder. Он не может быть расширен, поэтому требуется обертка.
public class CustomStringBuilder {
final String separator = System.getProperty("line.separator");
private StringBuilder builder = new StringBuilder();
public CustomStringBuilder appendLine(String str){
builder.append(str + separator);
return this;
}
public CustomStringBuilder append(String str){
builder.append(str);
return this;
}
public String toString() {
return this.builder.toString();
}
}
Реализация такая:
CustomStringBuilder builder = new CustomStringBuilder();
//iterate over as needed, but a wrapper to StringBuilder with new line features.
builder.appendLine("data goes here");
return builder.toString();
У этого есть некоторые недостатки:
- Написание кода, который обычно не ориентирован на «домен / бизнес»
- Не используется стандартное решение с открытым исходным кодом, например: StringUtils.join
- Вынужден поддерживать класс, заключающий в себе класс JDK, который является окончательным и, следовательно, обновления требуют длительного срока.
Я выбрал решение StringUtils.join для итерации по коллекциям и даже для создания в коде облегченных шаблонов методов сборки.