code: public static final <T> T getImplementation(ClassLoader loader,
                                                  Class<T> type,
                                                  Class<?>[] paramsType,
                                                  Collection<?> paramsValue,
                                                  String className)
      {
          try
          {
              if (!CLASS_CACHE.containsKey(className))
              {
                  final Class<?> clazz = loader.loadClass(className);
                  CLASS_CACHE.put(className, clazz);
              }
  
              final Class<?> clazz = CLASS_CACHE.get(className);
              final Constructor<?> constructor = UtilReflection.getCompatibleConstructor(clazz, paramsType);
              UtilReflection.setAccessible(constructor, true);
              return type.cast(constructor.newInstance(paramsValue.toArray()));
          }
          catch (final InstantiationException | IllegalArgumentException | InvocationTargetException exception)
          {
              throw new LionEngineException(exception, ERROR_CLASS_INSTANCE + className);
          }
          catch (final NoSuchMethodException | IllegalAccessException exception)
          {
              throw new LionEngineException(exception, ERROR_CLASS_CONSTRUCTOR + className);
          }
          catch (final ClassNotFoundException exception)
          {
              throw new LionEngineException(exception, ERROR_CLASS_PRESENCE + className);
          }
      }
docs: Get the class implementation from its name by using a custom constructor.
  
  @param <T> The instance type.
  @param loader The class loader to use.
  @param type The class type.
  @param paramsType The parameters type.
  @param paramsValue The parameters value.
  @param className The class name.
  @return The typed class instance.
  @throws LionEngineException If invalid class.