5

繰り返しが多い非常に大きなメソッドをリファクタリングしています。

メソッドには、以下を含む多くの while ループがあります。

    if ( count > maxResults){
        // Send error response
        sendResponse(XMLHelper.buildErrorXMLString("Too many results found, Please refine your search"), out, session);
        break;

現在、この1つのメソッドで3回発生するため、これをメソッドとして抽出したいのですが、そうすると、ループ内にないため、ブレーク時にエラーが発生します。問題は、まだ while ループから抜け出す必要があることですが、それは結果の最大数に達したときだけです。

助言がありますか?

4

5 に答える 5

3

メソッドが次のとおりであるとします。

public boolean test(int count, int maXResult) {
 if ( count > maxResults) {
        // Send error response
        sendResponse(XMLHelper.buildErrorXMLString("Too many results found, Please refine your search"), out, session);
        return true;
        }
return false;
}

次のようにループからメソッドを呼び出します。

while(testCondition) {
    if (test(count, maxResults)) {
    break;
   }
}
于 2012-12-19T09:07:12.987 に答える
3

これを直接行うことは不可能です。

ほとんどの場合、解決策を見つけて検索する必要がなくなったため、中断したいと考えています。そのため、たとえば、成功を示す結果またはブール値を返すことにより、呼び出された関数で成功した/成功したことを示します。関数が成功を返した場合は、中断します。

于 2012-12-19T09:03:31.047 に答える
1

while ループではなくメソッド内にある場合は、値を返してから、それに基づいてブレークします。

すなわち

public bool refactoredMethod(parameters)
{
    if ( count > maxResults){
    // Send error response
    sendResponse(XMLHelper.buildErrorXMLString("Too many results found, Please refine your     search"), out, session);

    return true;
    }

    return false;
}
于 2012-12-19T09:05:42.083 に答える
0

return を使用してメソッド内のループを中断してみてください。

于 2012-12-19T09:05:17.917 に答える
0

スリラーが言うように、直接行うことはできません。その一部をメソッドに抽出して、次のようにすることができます。

if(isTooManyResults(count)) { break; }

true明らかに、結果が多すぎる場合は isTooManyResults メソッドが返される必要がありfalseます。

于 2012-12-19T09:05:39.510 に答える