code: public <S extends ICDKObject, T extends S> boolean register(Class<S> intf, Class<T> impl,
              CreationModifier<T> modifier) {
  
          if (!isConcrete(impl)) throw new IllegalArgumentException("attempt to register non-concrete class");
  
          if (!intf.isInterface())
              throw new IllegalArgumentException("attempt to register a non-interface interface: " + intf.getSimpleName());
  
          boolean registered = Boolean.FALSE;
          for (Constructor<?> untyped : impl.getDeclaredConstructors()) {
              @SuppressWarnings("unchecked")
              Constructor<T> typed = (Constructor<T>) untyped;
              registered = register(intf, typed, modifier) || registered;
          }
  
          if (registered) {
              LOGGER.debug("registered '", intf.getSimpleName(), "' with '", impl.getSimpleName(), "' implementation");
          } else {
              LOGGER.debug("could not registered '", intf.getSimpleName(), "' with '", impl.getSimpleName(),
                      "' implementation");
          }
  
          return registered;
  
      }
docs: Explicitly register a concrete class with a provided interface and a
  given modifier. The {@link Creator} will be automatically created for all
  public constructors. The modifier is incorporated into the {@link
  Creator} and is invoked directly after instantiation.
  
  
  <pre>{@code
  // import static org.openscience.cdk.DynamicFactory.CreationModifier;
  factory.register(IAtom.class, Atom.class,
  new CreationModifier<Atom>() {
  public void modify(Atom atom) {
  atom.setFormalCharge(0);
  }
  }));
  }</pre>
  
  @param intf     the interface class to register
  @param impl     the concrete class which should implement the interface
  class
  @param modifier modify a instance after creation
  @param <S>      interface type
  @param <T>      implementation type (must extend interface)
  @return whether registration was successful