code: public <T> void register(final Class<T> cls, StringConverter<T> converter) {
          if (cls == null) {
              throw new IllegalArgumentException("Class must not be null");
          }
          if (converter == null) {
              throw new IllegalArgumentException("StringConverter must not be null");
          }
          if (this == INSTANCE) {
              throw new IllegalStateException("Global singleton cannot be extended");
          }
          registered.put(cls, TypedAdapter.adapt(cls, converter));
      }
docs: Registers a converter for a specific type.
  <p>
  The converter will be used for subclasses unless overidden.
  <p>
  No new converters may be registered for the global singleton.
  
  @param <T>  the type of the converter
  @param cls  the class to register a converter for, not null
  @param converter  the String converter, not null
  @throws IllegalArgumentException if the class or converter are null
  @throws IllegalStateException if trying to alter the global singleton