@SuppressWarnings("unchecked")
  // protected by 'if (type.isAssignableFrom(clazz)) {'
  public final void loadClassesFromMap(final Map<?, ?> properties, final Class<O> type) {

    final ClassLoader loader = ReflectionUtil.getClassLoader();
    for (Entry<?, ?> entry : properties.entrySet()) {
      final String className = entry.getValue().toString();
      final String name = entry.getKey().toString();

      try {
        final Class<?> clazz = loader.loadClass(className);
        if (type.isAssignableFrom(clazz)) {

          registerClass(name, (Class<? extends O>) clazz);

        } else {
          throw new MetafactureException(
              className
                  + " does not implement "
                  + type.getName()
                  + " registration with "
                  + this.getClass().getSimpleName()
                  + " failed.");
        }
      } catch (ClassNotFoundException e) {
        throw new MetafactureException(className + " not found", e);
      }
    }
  }
  @SuppressWarnings("unchecked")
  // protected by 'if (type.isAssignableFrom(clazz)) {'
  public static <O> Class<? extends O> loadClass(final String className, final Class<O> baseType) {
    Class<?> clazz;
    try {
      clazz = ReflectionUtil.getClassLoader().loadClass(className);
    } catch (ClassNotFoundException e) {
      throw new MetafactureException(className + " not found.", e);
    }

    if (baseType.isAssignableFrom(clazz)) {
      return (Class<? extends O>) clazz;
    }
    throw new MetafactureException(className + " must extend or implement " + baseType.getName());
  }