Please rethink extended enums inclusion

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


There is an error on my example.

   code setter must be private, I don't needed to change the internal code

Sorry for my mistake

On 07/10/2011 16:26, Llewellyn Falco wrote:
> I *really* think that changing enum is a bad idea. It is one of the things java has done right and better than anyone else.
>
> However, I am once again struck at how extension methods would help in this situation.
>
>
> Just to be clear. I mean c#/ruby extension methods where you can externally extend an object you don't control, as opposed to defender methods where you can put default method on interfaces you do control.
>
> Sent from my iPad
>
> On Oct 7, 2011, at 6:34 AM, Jose Antonio Illescas Del Olmo<jantonio.illescas at rbcdexia-is.es>  wrote:
>
>> On 07/10/2011 14:38, Tom
>>> 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