referenciar cada caso de um interruptor de uma condicional dentro de um método diferente em java

StackOverflow https://stackoverflow.com/questions/1219032

Pergunta

Estou implementando alguns métodos que usam declarações switch para distinguir entre diferentes casos:

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

O funciona bem acima, quando, ainda mais para baixo a lógica de negócios, eu chamo doThis () dentro de outros métodos que precisam dos doThis () funcionalidade.

No entanto, neste momento, estou um pouco confuso como incorporar outras condições / restrições colocadas em cada caso do interruptor acima.

Quer dizer, quando eu chamo doThis () dentro digamos biggerOperation (), eu tenho novas condições que precisam ser aplicadas contra cada caso do interruptor de pertença nas doThis () função:

lógica Amostra:

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()
    }
}

Eu não tenho sido capaz de descobrir uma maneira elegante, limpo e compacto para fazer isso a partir de agora. Existem quaisquer ideias, talvez? Como segmentar explicitamente cada caso de um switch? Eu poderia usar uma nova opção para implementar essa lógica condicional?

Todas as sugestões são bem vindas. Muito agradeço a sua ajuda.

Foi útil?

Solução

Refactor seu comando enumeração de classes usando o padrão de comando.

Outras dicas

Você poderia começar a fazer algo como

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

Em seguida, fazer um pouco mais de refatoração. Mas eu acho que este é um bom ponto de partida (considerando que você não está irritado com 4 aninhados se elses e 4 casos switch).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top