code: @SafeVarargs
    public static <T> T invokeFirstConstructor(Class<T> cls, List<Object>... constructorArgs)
        throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
  
      for (List<Object> args : constructorArgs) {
  
        Class<?>[] parameterTypes = new Class[args.size()];
        for (int i = 0; i < args.size(); i++) {
          parameterTypes[i] = args.get(i).getClass();
        }
  
        if (ConstructorUtils.getMatchingAccessibleConstructor(cls, parameterTypes) != null) {
          return ConstructorUtils.invokeConstructor(cls, args.toArray(new Object[args.size()]));
        }
      }
      throw new NoSuchMethodException("No accessible constructor found");
    }
docs: Convenience method on top of {@link ConstructorUtils#invokeConstructor(Class, Object[])} that returns a new
  instance of the <code>cls</code> based on a constructor priority order. Each {@link List} in the
  <code>constructorArgs</code> array contains the arguments for a constructor of <code>cls</code>. The first
  constructor whose signature matches the argument types will be invoked.
  
  @param cls the class to be instantiated
  @param constructorArgs An array of constructor argument list. Order defines the priority of a constructor.
  @return
  
  @throws NoSuchMethodException if no constructor matched was found