내가 생각할 수있는 한 가지 가능성은 클래스의 멤버 변수에 카운트를 저장하는 것입니다.물론 이것은 공개 doIt
메서드가 단일 스레드에 의해서만 호출된다고 가정합니다.
또 다른 옵션은 공개 메소드가 개인 도우미 메소드를 호출하도록 리팩터링하는 것입니다. private 메서드는 목록을 매개 변수로 사용하고 개수를 반환합니다. 예를 들면 :
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;
}
이것은 count
변수가 실제로 호출자에게 다시 전달되지 않기 때문에 당신이 대중 doIt
방법에 오류 처리를 할 수 있다고 가정합니다. 당신은 그렇게해야하는 경우는 물론 예외를 던질 수 :
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;
}
그것은 그 알고리즘이 실제로 어떻게 작동하는지에 대한 자세한 내용을 알고없이 도움이 될 것입니다 여부를 알기 어렵다.
를 틀림없는 대답하지만 일부 공감 : 내가 몇 달 전에 비슷한 상황에 달렸다 :-). 커먼 리스프를 사용하고 있었기 때문에 간단히 말해서 카운터를 '특별'(즉 어휘 스코프 대신 동적 범위)로 선언 할 수는 있었지만 "다른 언어의 경우에는 1 줄 이상의 코드가 필요했습니다. 풀다". – Ken