1つの可能性は、クラスのメンバー変数にカウントを格納することです。これはもちろん、公開のdoIt
メソッドが1つのスレッドによってのみ呼び出されることを前提としています。
パブリックメソッドをリファクタリングしてプライベートヘルパーメソッドを呼び出すこともできます。プライベートメソッドは、リストをパラメータとして取り、カウントを返します。たとえば、次のように
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;
}
それはそれはあなたのアルゴリズムが実際にどのように機能するかについての詳細を知らなくても役立つかどうかを知ることは困難です。
を確かにない答えが、いくつかの同情を:私は数ヶ月前に似たような状況に遭遇した:-)。私はCommon Lispを使っていたので、単にカウンターの「特別な」(語彙的スコープではなく動的スコープで)宣言することができましたが、他のどの言語でも1行以上のコードが必要です解決する"。 – Ken