import java.util.*; interface TypesafeMap { @SuppressWarnings({"UnusedDeclaration"}) public interface Key { } public > boolean has(Class key); public > VALUE get(Class key); public > VALUE set(Class key, VALUE value); public > VALUE remove(Class key); public Set> keySet(); public > boolean containsKey(Class key); } interface CoreMap extends TypesafeMap { } interface CoreAnnotation extends TypesafeMap.Key { public Class getType(); } class CoreMaps { public static Map toMap(Collection coremaps, Class> keyKey, Class> valueKey) { Map map = new HashMap(); for (CoreMap cm : coremaps) { map.put(cm.get(keyKey), cm.get(valueKey)); } return map; } }