BTW, I tend to do:

    for (Map.Entry<Class<? extends Annotation>, T> entry : methodsForAnnotations.entrySet()) {
        methodsForAnnotations.put(entry.getKey(), entry.getValue());
    }

Although, according to the `Map` javadoc, "If the map is modified while an iteration over the set is in progress (except through the iterator's own remove operation), the results of the iteration are undefined." so it might be best to return a copy.