我正在重构一个非常大的方法,里面有很多重复。
在该方法中有许多while循环,包括:
if ( count > maxResults){
// Send error response
sendResponse(XMLHelper.buildErrorXMLString("Too many results found, Please refine your search"), out, session);
break;
我想把它作为一种方法提取出来,因为它在当前这个方法中发生了3次,但是当我这样做时,我在中断时得到一个错误,因为它不再在循环中。问题是仍然需要打破while循环,但仅在达到最大结果数时。
有什么建议吗?
答案 0 :(得分:3)
这是不可能直接做的。
大多数情况下,你想要破解,因为你找到了解决方案而不再需要搜索。因此,在被调用函数中指示存在/是否成功,例如通过返回结果或布尔值来指示成功。如果函数返回成功,则中断。
答案 1 :(得分: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;
}
}
答案 2 :(得分: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;
}
答案 3 :(得分:0)
尝试使用return;
打破方法中的循环答案 4 :(得分:0)
正如Thriler所说,你无法直接做到这一点。您可以将其中的一部分提取到方法中并执行以下操作:
if(isTooManyResults(count)) { break; }
显然,如果结果太多,则isTooManyResults方法需要返回true
,否则false