Re: Better way to implement reverse mapping of custom enum
ordinals?
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
---910079544-521736780-1261229124=:10735
Content-Type: TEXT/PLAIN; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8BIT
On Fri, 18 Dec 2009, John B. Matthews wrote:
In article
<24ebe868-e3b3-49f9-a23c-0c47a107d6fe@a32g2000yqm.googlegroups.com>,
"david.karr" <davidmichaelkarr@gmail.com> wrote:
On Dec 18, 4:25??pm, EJP <esmond.not.p...@not.bigpond.com> wrote:
david.karr wrote:
Can someone think of a better way to do this, that doesn't repeat
the column values?
Have each enum value enter itself on construction into a
Map<Integer, YourEnum> with its own ColumnValue as the key.
Concerning the Map, I had already thought of that. That's the obvious
way to do it. Now, how would you do it? I would assume you'd define a
static Map in the enum type and have the constructor put itself into
the map. The problem is, it doesn't appear to be possible to do that.
It doesn't compile.
A static initializer works, as suggested in the "enum Color" discussion:
<http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.9>
You can also trick the constructor-put idea into working by moving the map
into a different class, which can even be an inner class of the enum:
public enum SomeType {
FOO(101),
BAR(100),
GORK(4001);
private static class ByColumnValue {
public static final Map<Integer, SomeType> MAP = new HashMap<Integer, SomeType>();
}
private final int columnValue;
private SomeType(int columnValue) {
this.columnValue = columnValue;
ByColumnValue.MAP.put(columnValue, this);
}
public SomeType getEnum(int columnValue) {
return ByColumnValue.MAP.get(columnValue);
}
}
tom
--
All bloggers must die.
---910079544-521736780-1261229124=:10735--