code: @SuppressWarnings("unchecked")
      public static DataProviderFactory create(final Object... args) {
          // Find the implementation for the DataProviderFactory.
          final Class<? extends DataProviderFactory> dataProviderClass = findDataProviderImpl();
  
          // Find the constructor that matches the arguments passed.
          final DataProviderFactory factory;
          try {
              Constructor<? extends DataProviderFactory> dataProviderConstructor = null;
              final Constructor[] constructors = dataProviderClass.getDeclaredConstructors();
              for (final Constructor constructor : constructors) {
                  final Class<?>[] params = constructor.getParameterTypes();
                  boolean matches = false;
  
                  // Ensure that all the argument match
                  if (args.length == params.length) {
                      matches = true;
                      for (int i = 0; i < params.length; i++) {
                          if (!params[i].isAssignableFrom(args[i].getClass())) {
                              matches = false;
                          }
                      }
                  }
  
                  // If the constructor matches then break the loop, as we've found the matching constructor
                  if (matches) {
                      dataProviderConstructor = constructor;
                      break;
                  }
              }
  
              // Make sure a constructor was found
              if (dataProviderConstructor != null) {
                  factory = dataProviderConstructor.newInstance(args);
              } else {
                  factory = null;
              }
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
  
          return factory;
      }
docs: Initialise the Data Provider Factory with the required data.
  
  @param args The arguments required to create the Data Provider Factory.