Please rethink extended enums inclusion

Jose Antonio Illescas Del Olmo jantonio.illescas at rbcdexia-is.es
Fri Oct 7 06:34:50 PDT 2011


On 07/10/2011 14:38, Tom Hawtin wrote:
> On 07/10/2011 12:34, Jose Antonio Illescas Del Olmo wrote:
>> Now we have hundred of enums on our project (finantial application with
>> 120.000 lines) an repeat same code on any enum... (*mark as red*)
>>       public enum Type {
> [...]
>>          public void setCode(String code) {
>>              this.code = code;
> I have to point out that mutable enums, or other statics, is generally a
> *really* bad idea. (Also a non-null check here wouldn't go amiss.)
>
Sorry, I don't understand you. Where is the mutable enums that you say?


> It seems what we want here is a mutable Map<String,E extends Enum<E>>,
> which is easy enough.
>
>   >  **      public static Type fromCode(String code) {
>
> Your inheritance wont work here. not unless you do something really dodgy.

It's true, I really need next method on MyAbstractEnum:

     public static <T extends Enum<T>> T fromCode(Class<T> enumType, 
String code)  // similar to JDK Enum.valueOf(Class<T>, String) method

and call from my Concrete enum:

   public static Type fromCode(String code) {
      return fromCode(Type.class, code);
   }




>> **      public boolean in(Type... types) {  // IMO all enums must have
>> this method
>>              if (types == null) return false;
>>              for(Type type: types) {
>>                 if (this == type) return true;
>>              }
>>              return false;
>>          }
>       asList(a, b, c).contains(en)
>
> Collection literals would help marginally.
>
It's true, but I think that this must be on java.lang.Enum.

> Even if you were going for mutable statics (and I still strongly suggest
> you don't) it doesn't seem a difficult problem, so long as you don't
> require these methods within the enum itself.

Tom I don't understand what say (Please be patient, english is not my 
native language)

>   Just introduce a class
> that contains the mapping, and add an instance to each enum. You may
> need to implement a one-method interface if you want to initialise the
> mappings from MyEnum.values().

But one additional class for every enum (exist more than 350 enums on my 
application) add to many code to map code-enum (I like to remove 
unnecesar code)
> Tom
>
>
Thank you, Tom



More information about the coin-dev mailing list