code: @SuppressWarnings({"rawtypes", "unchecked"})
      public static String join(final Collection<?> collection, final String delimiter, final TextPrinter printer) {
          
          Objects.requireNonNull(printer);
          
          if(collection == null || collection.isEmpty()) {
              return "";
          }
          
          String value = collection.stream()
                  .map(v -> printer.print(v))
                  .collect(Collectors.joining(defaultString(delimiter)));
          
          return value;
      }
docs: コレクションの値を結合する。
  @param collection 結合対象のコレクション
  @param delimiter 区切り文字
  @param printer コレクションの要素の値のフォーマッタ
  @return 結合した文字列を返す。結合の対象のコレクションがnulの場合、空文字を返す。
  @throws NullPointerException {@literal printer is null.}