Я могу придумать одну возможность - сохранить счетчик в переменной-члене класса. Это, конечно, предполагает, что открытый метод doIt
вызывается только одним потоком.
Другим вариантом является рефакторинг открытого метода для вызова частного вспомогательного метода. Закрытый метод принимает список в качестве параметра и возвращает количество. Например:
public List<Thing> doIt(String aString) {
List<Thing> list = new ArrayList<Thing>();
int count = doItHelper(aString, list, 0);
// ...
return list;
}
private int doItHelper(String aString, List<Thing> list, int count) {
// ...
// do something that updates count
count = doItHelper(aString, list, count);
// ...
return count;
}
Предполагается, что вы можете выполнять обработку ошибок в общедоступном методе doIt
, поскольку переменная count
фактически не передается вызывающей стороне. Если вам нужно сделать это, вы, конечно, можете выдать исключение:
public List<Thing> doIt(String aString) throws SomeCustomException {
List<Thing> list = new ArrayList<Thing>();
int count = doItHelper(aString, list, 0);
// ...
if (someErrorOccurred) {
throw new SomeCustomException("Error occurred at chracter index " + count, count);
}
return list;
}
Трудно понять, поможет ли это, не зная, как на самом деле работает ваш алгоритм.