2009-08-02 8 views
0

ich einige Methoden bin der Umsetzung der Switch-Anweisungen verwenden, um zwischen den verschiedenen Fällen zu unterscheiden:jeden Fall eines Schalters von einem bedingten innerhalb einer anderen Methode in Java-Referenzierung

private void doThis(){ 
    switch(command){ 
    case on: {status = doCalculationsA; break;} 
    case off: {status = doCalculationsB; break;} 
    case idle: {status = doCalculationsC; break;} 
    case stdby:{status = doCalculationsD; break;} 
    } 
} 

Die oben funktioniert gut, wenn weiter unten in der Geschäftslogik, ich rufe doThis() innerhalb anderer Methoden auf, die die doThis() Funktionalität benötigen.

Allerdings bin ich in diesem Moment ein wenig verwirrt, wie andere Bedingungen/Einschränkungen in jedem Fall des oben genannten Schalters einbeziehen.

meine ich, wenn ich rufe DoThis() innerhalb sagen biggerOperation(), I neue Bedingungen, die gegen jeweils des Schalters in der DoThis() Funktion gehören, angewendet werden müssen:

Beispiellogik:

biggerOperation(){ 

    doThat(); 
    doTheOther(); 

    if(somethingIsTrue){ 
     execute "case: on" of doThis() 
    } 
    else if(somethingElseIsTrue){ 
     execute "case: off" of doThis() 
    } 
    else if(aThirdThingIsTrue){ 
     execute "case: idle" of doThis() 
    } 
    else if(aFourthThingIsTrue){ 
     execute "case: stdby" of doThis() 
    } 
} 

Ich war nicht in der Lage, eine elegante, saubere und kompakte Möglichkeit zu finden, dies ab sofort zu tun. Gibt es vielleicht Ideen? Wie kann ich explizit auf jeden Fall eines Switches abzielen? Kann ich einen neuen Switch verwenden, um diese bedingte Logik zu implementieren?

Alle Vorschläge sind willkommen. Vielen Dank für Ihre Hilfe.

Antwort

1

Refactorieren Sie Ihre Befehlsauflistung in Klassen mithilfe des Befehlsmusters.

+0

Danke für Ihre Eingabe. Wenn es Ihnen nichts ausmacht, könnten Sie vielleicht etwas mehr über die neue Logik erklären? Mit dem Befehlsmuster meinen Sie den Methodenaufruf? – denchr

+2

siehe diese Frage: http://stackoverflow.com/questions/1199646/long-list-of-if-statements-in-java/1199677 –

+0

Ja, es sieht ziemlich ähnlich aus. Danke für das Aufzeigen! – denchr

0

könnten Sie beginnen, etwas zu tun, wie

public MyCreatedEnum getCommand() { 
    if(somethingIsTrue){ 
     return MyCreatedEnum.on; 
    } 
    else if(somethingElseIsTrue){ 
     return MyCreatedEnum.off 
    } 
    else if(aThirdThingIsTrue){ 
     return MyCreatedEnum.idle 
    } 
    else if(aFourthThingIsTrue){ 
     return MyCreatedEnum.stdby 
    } 
} 

private void doThis(){ 
    MyCreatedEnum command = getCommand(); 
    switch(command){ 
    case MyCreatedEnum.on: {status = doCalculationsA; break;} 
    case MyCreatedEnum.off: {status = doCalculationsB; break;} 
    case MyCreatedEnum.idle: {status = doCalculationsC; break;} 
    case MyCreatedEnum.stdby:{status = doCalculationsD; break;} 
    } 
} 

public void biggerOperation(){ 
    doThat(); 
    doTheOther(); 
    doThis(); 
} 

dann etwas mehr Refactoring tun. Aber ich denke, das ist ein guter Ausgangspunkt (wenn man bedenkt, dass Sie nicht genervt sind von 4 verschachtelten if elnes und 4 switch cases).

+0

das sieht vielversprechend aus. Werde es versuchen! – denchr

Verwandte Themen