Стандартная реализация Formatter
является «состоящей из состояний», то есть при ее использовании изменяется внутреннее состояние. Это затрудняет повторное использование.
Есть несколько вариантов, которые вы можете попробовать:
Если бы это был ваш код, вы можете добавить метод reset()
, чтобы очистить внутреннее состояние. Недостаток: если вы забудете вызвать этот метод, произойдут плохие вещи.
Вместо этого при изменении внутреннего состояния вы можете вернуть отформатированный результат в format()
. Поскольку у вас больше нет внутреннего состояния, объект можно повторно использовать без метода reset()
, что делает его более безопасным для использования
Но поскольку это стандартный API, его нельзя изменить.
Просто создайте новые объекты в цикле. Создание объектов в Java довольно дешево, и забывать о них ничего не стоит. Время, затрачиваемое на сборку мусора, зависит от количества живых объектов, а не от количества мертвых объектов, создаваемых вашим кодом. По сути, GC полностью игнорирует любые объекты, которые больше не связаны с другими объектами. Таким образом, даже если вы позвоните new
миллиард раз в цикле, GC не заметит.