Please rethink extended enums inclusion
Tom Hawtin
tom.hawtin at oracle.com
Fri Oct 7 05:38:25 PDT 2011
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.)
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.
> ** 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.
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. 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().
Tom
More information about the coin-dev
mailing list