2012-12-19 6 views
5

Sto rifattorizzando un metodo molto grande con molte ripetizioni in esso.Interruzione di un metodo chiamato da un loop

Nel metodo ci sono molti cicli while che comprendono:

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

Voglio estrarre questo come un metodo, perché avviene 3 volte in questo metodo attualmente, ma quando lo faccio in modo da ottenere un errore durante l'interruzione in quanto non è più all'interno di un ciclo. Il problema è che è ancora necessario interrompere il ciclo while, ma solo quando viene raggiunto il numero massimo di risultati.

Qualche suggerimento?

+2

Perché non semplicemente restituire? –

risposta

3

Supponiamo che il metodo è: metodo

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; 
} 

chiamata dal ciclo come:

while(testCondition) { 
    if (test(count, maxResults)) { 
    break; 
    } 
} 
+0

Grazie mille, mi mancava l'ovvio. – Carasel

+0

Succede a volte :) Felice di aiutare. – Amber

3

Questo è impossibile da eseguire direttamente.

Molto spesso si vuole rompere perché hai trovato la soluzione e non devi più cercare. Quindi indica nella funzione chiamata che c'è/era successo, ad esempio restituendo un risultato o un valore booleano per indicare il successo. E se la funzione restituisce successo, quindi rompere.

+0

Anche se fosse possibile, il codice sarebbe incomprensibile. – jmrodrigg

+0

Niente affatto. La funzione accetta un'attività (ad esempio, decidere se l'azione è stata eseguita correttamente, o abbastanza e fare un'azione quando lo è) e il risultato di ciò viene utilizzato per smettere di cercare. – Thirler

+0

Grazie Thirler, proprio quello di cui avevo bisogno. – Carasel

0

Provare a interrompere il ciclo nel metodo utilizzando return;

0

Come dice Thriler, non puoi farlo direttamente. Si potrebbe estrarre una parte di esso al metodo e fare qualcosa di simile:

if(isTooManyResults(count)) { break; } 

Ovviamente il metodo di isTooManyResults avrebbe bisogno di tornare true se ci sono troppi risultati e false altrimenti

1

Se è ora all'interno di un metodo invece del ciclo while, restituisce un valore e poi interrompe basato su quello.

cioè

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; 
} 
Problemi correlati