Spec-Zone.ru › OpenJDK 24

Интерфейс 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."
 

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

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

Since:
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() для получения Appendable или Locale, используемых этим formatter соответственно.
flags - Флаги изменяют формат вывода. Значение интерпретируется как битовая маска. Любая комбинация следующих флагов может быть установлена: FormattableFlags.LEFT_JUSTIFY, FormattableFlags.UPPERCASE и FormattableFlags.ALTERNATE. Если флаги не установлены, применяется стандартное форматирование реализующего класса.
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.
Все права защищены. Использование регулируется лицензионными условиями и политикой перераспределения документации.
DRAFT 24-ea+36-Debian-1

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/Formattable.html

Spec-Zone.ru

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