code: @SuppressWarnings("unchecked")
      public static <T> T createReduce(Class<T> type, Object... params) throws NoSuchMethodException
      {
          Check.notNull(type);
          Check.notNull(params);
  
          final Class<?>[] paramTypes = getParamTypes(params);
          final Queue<Class<?>> typesQueue = new ArrayDeque<>(Arrays.asList(paramTypes));
          final Queue<Object> paramsQueue = new ArrayDeque<>(Arrays.asList(params));
          boolean stop = false;
          while (!stop)
          {
              final int typesLength = typesQueue.size();
              final Class<?>[] typesArray = typesQueue.toArray(new Class<?>[typesLength]);
              for (final Constructor<?> constructor : type.getDeclaredConstructors())
              {
                  final Class<?>[] constructorTypes = constructor.getParameterTypes();
                  if (constructorTypes.length == typesLength
                      && (typesLength == 0 || hasCompatibleConstructor(typesArray, constructorTypes)))
                  {
                      return create(type, (Constructor<T>) constructor, paramsQueue.toArray());
                  }
              }
  
              stop = paramsQueue.isEmpty();
              typesQueue.poll();
              paramsQueue.poll();
          }
          throw new NoSuchMethodException(ERROR_NO_CONSTRUCTOR_COMPATIBLE
                                          + type.getName()
                                          + ERROR_WITH
                                          + Arrays.asList(paramTypes));
      }
docs: Create a class instance with its parameters. Use a compatible constructor with the following parameters, reducing
  parameter types array as a queue until empty in order to find a constructor.
  
  @param <T> The element type used.
  @param type The class type (must not be <code>null</code>).
  @param params The maximum parameters in sequential order (must not be <code>null</code>).
  @return The constructor found.
  @throws NoSuchMethodException If no constructor found.
  @throws LionEngineException If invalid parameters.