Al lavoro mi sono imbattuto in un problema per vedere come crescono le enumerazioni e memorizzare le logiche di business. Mentre crescevano, i costruttori sono cresciuti molto. A un certo punto ho scoperto invece di inserire il decimo parametro booleano (e che aveva già vari altri parametri rispetto al booleano) nel costruttore ed espandere tutte le inizializzazioni con un parametro aggiuntivo, ne farò un nuovo - ma non proprio usato - costruzione per scopi di leggibilità del codice.
Ecco un esempio, quindi anziché:
public enum A {
A1(true, true, false),
A2(true, false, true),
A3(false, false, false);
private A(boolean firstParam, boolean secondParam, boolean thirdParam){
... usual constructor ...
}
... getters
Così invece ho fatto quanto segue:
public enum A {
A1,
A2,
A3;
... no need for special constructor
public boolean isFirstParam(){
switch(this){
case A1:
case A2:
return true;
default:
return false;
}
}
public boolean isSecondParam(){
switch(this){
case A1:
return true;
default:
return false;
}
}
public boolean isThirdParam(){
switch(this){
case A2:
return true;
default:
return false;
}
}
Finora chiunque lo abbia usato lo apprezza. Ma alcuni colleghi che non ne erano a conoscenza hanno avuto reazioni negative:
- Sonar non è stato felice di vedere l'istruzione switch (this).
- Non gli piaceva il concetto stesso.
La mia domanda è: c'è una vera ragione per cui non dovrei usarla? È molto più mantenibile quando hai enumerazioni complesse. Credo di non aver usato niente di speciale, semplicemente passando da enum, solo in un posto speciale. Ho ragione?