docs: public <T extends CanvasWriter> T getWriter(Class<T> type, OauthToken oauthToken, Boolean serializeNulls) {
          LOG.debug("Factory call to instantiate class: " + type.getName());
          RestClient restClient = new RefreshingRestClient();
  
          @SuppressWarnings("unchecked")
          Class<T> concreteClass = (Class<T>) writerMap.get(type);
  
          if (concreteClass == null) {
              throw new UnsupportedOperationException("No implementation for requested interface found: " + type.getName());
          }
  
          LOG.debug("got writer class: " + concreteClass);
          try {
              Constructor<T> constructor = concreteClass.getConstructor(String.class, Integer.class, OauthToken.class,
                      RestClient.class, Integer.TYPE, Integer.TYPE, Integer.class, Boolean.class);
              return constructor.newInstance(canvasBaseUrl, CANVAS_API_VERSION, oauthToken, restClient,
                      connectTimeout, readTimeout, null, serializeNulls);
          } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | InstantiationException e) {
              throw new UnsupportedOperationException("Unknown error instantiating the concrete API class: " + type.getName(), e);
          }
      }