5

我正在重构一个非常大的方法,其中有很多重复。

在该方法中有许多 while 循环,包括:

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

我想将其提取为一种方法,因为它目前在这个方法中发生了 3 次,但是当我这样做时,我在中断时收到错误,因为它不再在循环中。问题是仍然需要跳出 while 循环,但只有在达到最大结果数时才可以。

有什么建议么?

4

5 回答 5

3

这是不可能直接做到的。

大多数情况下,你想打破,因为你已经找到了解决方案,不再需要搜索。因此,在被调用函数中指示成功/成功,例如通过返回结果或布尔值来指示成功。如果函数返回成功,则中断。

于 2012-12-19T09:03:31.047 回答
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 回答
1

如果它现在在一个方法而不是 while 循环中,则让它返回一个值,然后基于该值中断。

IE

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

正如 Thriler 所说,你不能直接这样做。您可以将其中的一部分提取到方法中并执行以下操作:

if(isTooManyResults(count)) { break; }

true显然,如果结果太多,您的 isTooManyResults 方法将需要返回,false否则

于 2012-12-19T09:05:39.510 回答