// Först behöver vi ett interface package net.valfridsson; public interface IdentityEnum> { /** * @return Hämtar ut {@link I} för {@link E} */ I getId(); } // Sedan behövver vi mekanismen som hanterar uppslagen mellan enumarna package net.valfridsson; import java.util.HashMap; import java.util.Map; import java.util.Set; public class EnumLookupMap & IdentityEnum> { private Map map = new HashMap(); public EnumLookupMap(Class clazz) { for (E e : clazz.getEnumConstants()) { map.put(e.getId(), e); } } public E get(I key) { return map.get(key); } public Set> getEntries() { return map.entrySet(); } } // Hur använder vi den: private enum EnumB { VALUE_1, VALUE_2; } private enum EnumA implements IdentityEnum { VALUE_1(EnumB.VALUE_1),VALUE_2(EnumB.VALUE_2); private EnumB enumb; public static EnumLookupMap map = new EnumLookupMap(EnumA.class); private EnumA(EnumB enumb) { this.enumb = enumb; } public static EnumA valueOf(EnumB enumB){ return map.get(enumB); } public EnumB getId() { return enumb; } } // Man kan nu hämta ut EnumB från EnumA - getId() // samt få ut EnumA utifrån EnumB - valueOf(EnumB enum)