Spec-Zone.ru › OpenJDK 25

Интерфейс Formattable

public interface Formattable
Интерфейс Formattable должен реализовываться любым классом, которому требуется выполнять пользовательское форматирование с помощью спецификатора преобразования 's' класса Formatter. Этот интерфейс обеспечивает базовое управление форматированием произвольных объектов. Например, следующий класс выводит разные представления названия акции в зависимости от флагов и ограничений длины:
  import java.nio.CharBuffer;
  import java.util.Formatter;
  import java.util.Formattable;
  import java.util.Locale;
  import static java.util.FormattableFlags.*;

  ...

  public class StockName implements Formattable {
      private String symbol, companyName, frenchCompanyName;
      public StockName(String symbol, String companyName,
                       String frenchCompanyName) {
          ...
      }

      ...

      public void formatTo(Formatter fmt, int f, int width, int precision) {
          StringBuilder sb = new StringBuilder();

          // decide form of name
          String name = companyName;
          if (fmt.locale().equals(Locale.FRANCE))
              name = frenchCompanyName;
          boolean alternate = (f & ALTERNATE) == ALTERNATE;
          boolean usesymbol = alternate || (precision != -1 && precision < 10);
          String out = (usesymbol ? symbol : name);

          // apply precision
          if (precision == -1 || out.length() < precision) {
              // write it all
              sb.append(out);
          } else {
              sb.append(out.substring(0, precision - 1)).append('*');
          }

          // apply width and justification
          int len = sb.length();
          if (len < width)
              for (int i = 0; i < width - len; i++)
                  if ((f & LEFT_JUSTIFY) == LEFT_JUSTIFY)
                      sb.append(' ');
                  else
                      sb.insert(0, ' ');

          fmt.format(sb.toString());
      }

      public String toString() {
          return String.format("%s - %s", symbol, companyName);
      }
  }

При использовании вместе с Formatter приведённый выше класс формирует следующий вывод для различных строк формата.

  Formatter fmt = new Formatter();
  StockName sn = new StockName("HUGE", "Huge Fruit, Inc.",
                               "Fruit Titanesque, Inc.");
  fmt.format("%s", sn);                   //   -> "Huge Fruit, Inc."
  fmt.format("%s", sn.toString());        //   -> "HUGE - Huge Fruit, Inc."
  fmt.format("%#s", sn);                  //   -> "HUGE"
  fmt.format("%-10.8s", sn);              //   -> "HUGE      "
  fmt.format("%.12s", sn);                //   -> "Huge Fruit,*"
  fmt.format(Locale.FRANCE, "%25s", sn);  //   -> "   Fruit Titanesque, Inc."

Объекты, реализующие Formattable, не обязательно безопасны для использования в многопоточной среде. Потокобезопасность необязательна и может обеспечиваться классами, расширяющими и реализующими этот интерфейс.

Если не указано иное, передача аргумента null любому методу этого интерфейса приведёт к выбросу исключения NullPointerException.

Появился в версии:
1.5

Краткое описание методов

Модификатор и тип Метод Описание
void formatTo(Formatter formatter, int flags, int width, int precision)
Форматирует объект с помощью предоставленного formatter.

Подробное описание методов

formatTo

void formatTo(Formatter formatter, int flags, int width, int precision)
Форматирует объект с помощью предоставленного formatter.
Параметры:
formatter — formatter. Реализующие классы могут вызывать formatter.out() или formatter.locale(), чтобы получить используемые этим formatter соответственно Appendable или Locale.
flags — флаги изменяют формат вывода. Значение интерпретируется как битовая маска. Можно установить любую комбинацию следующих флагов: FormattableFlags.LEFT_JUSTIFY, FormattableFlags.UPPERCASE и FormattableFlags.ALTERNATE. Если флаги не установлены, применяется форматирование по умолчанию, определённое реализующим классом.
width — минимальное количество символов, выводимых в результат. Если длина преобразованного значения меньше width, результат будет дополнен '  ' до тех пор, пока общее количество символов не станет равным width. По умолчанию дополнение выполняется в начале. Если установлен флаг FormattableFlags.LEFT_JUSTIFY, дополнение будет выполняться в конце. Если width равно -1, минимальная длина не задаётся.
precision — максимальное количество символов, выводимых в результат. Точность применяется до ширины, поэтому результат будет усечён до precision символов, даже если width больше, чем precision. Если precision равно -1, явное ограничение на количество символов отсутствует.
Выбрасывает:
IllegalFormatException — если какой-либо из параметров недопустим. Описание всех возможных ошибок форматирования см. в разделе Подробное описание спецификации класса formatter.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/Formattable.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API