code: public T put(final Class<?> key, final T value) {
          try {
              return map.put(key, value);
          } finally {
              cache.clear();
          }
      }
docs: As per {@code java.util.Map}, associates the specified value with the specified key in this map.  If the map previously contained a
  mapping for the key, the old value is replaced by the specified value.
  
  @param key   a {@code Class} key
  @param value the value for this class
  @return the previous value associated with {@code key}, or null if there was no mapping for key.
  @see java.util.Map#put(Object, Object)