code: public <V> ChronoFormatter<T> withDefaultSource(
          ChronoElement<V> element,
          ChronoElement<V> source
      ) {
  
          if (element.equals(source)) { // NPE-check
              throw new IllegalArgumentException("Source equal to defaulting element.");
          }
  
          Map<ChronoElement<?>, Object> defaultMap = new HashMap<>();
          defaultMap.put(element, source);
          return new ChronoFormatter<>(this, defaultMap);
  
      }
docs: /*[deutsch]
  <p>Legt eine Elementquelle in interpretierten Rohdaten f&uuml;r einen Standard-Ersatzwert
  des angegebenen Elements fest, wenn die Interpretation sonst nicht funktioniert. </p>
  
  <p>Standard-Ersatzwerte werden von Time4J herangezogen, wenn entweder
  der Formatierer das fragliche Element nicht enth&auml;lt oder wenn es
  keine konsumierbaren Zeichen f&uuml;r das angegebene Element gibt.
  Die letzte Situation erfordert manchmal die Verwendung des sektionalen
  Attributs {@code PROTECTED_CHARACTERS}, um eine Situation zu simulieren,
  in der der Formatierer quasi am Ende eines Texts angekommen ist. </p>
  
  @param   <V> generic element value type
  @param   element     chronological element to be updated
  @param   source      element reference in parsed data whose value serves as replacement value
  or {@code null} if the default value shall be deregistered
  @return  changed copy with new replacement value
  @throws  IllegalArgumentException if the first argument is not supported by the underlying chronology
  or if both arguments are equal
  @see     Attributes#PROTECTED_CHARACTERS
  @since   4.20