java - Different Enum method parameters -


i have come across case need make design decision (not program itself, learning others in situation, best @ though going api). have enum class:

public enum type {      captain(2),  // use calcmorale never other     leader(5),   // use calcmorale never other     partier(80); // use calcmorale2 never other      int calcmorale(int inmorale)     {         return inmorale * (100 + morale) / 100;     }      int calcmorale2(int inmorale, int teamcount)     {         return inmorale + morale * teamcount;     }      int morale;      private type(int amor)     {         morale = amor;     }  } 

there class character holds 1 of these enums , 1 passing in parameters.

the problem commented, want enums use methods inside enum class. leader adds 5 percent team morale, partier adds 80 each member inside party requiring parameter. solve problem few ways, know general consensus of community on how they'd go it.

i could:

make programmers responsibility call right method. (this sounds wrong me).

give each enum it's own version of function. (this make massive file, , repeating lot of code).

leave responsibility 'character' class has method switch processing this. (this means programmer change calculations , not intended). cause less problems if wanted move enums file later instead. question if breaking encapsulation if should solely enums responsibility.

make type class , define methods via anonymous inner classes. in case, classes added map, opposed having getbyname() in enum class.

--

what consider appropriate? (i prefer classes self dependent possible though using api (it won't be), , how/would suggestion affected depending on amount of enums? , case wanted enum able use both methods? language java.

like said, have think how application going handle this. if want enum class handle itself, need sort of conditional , form of overloading (which means developers responsible calling right methods anyway.

however force developers send teamcount regardless:

public enum type {     captain(2),     leader(5),     partier(80);      private final int morale;      private type(int m){         morale = m;     }      public int getmorale(int inmorale) {          return getmorale (inmorale, 0);     }      public int getmorale(int inmorale, int teamcount) {         switch (this) {             case captain:                    case leader:                 return inmorale * (100 + morale) / 100;             case partier:                 return inmorale + morale * teamcount;         }         return 0;     } } 

edit: changed switch 'this'


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -