インタフェースFormattable


public interface Formattable
Formattableインタフェースは、Formatter's'変換指定子を使用してカスタム書式設定を実行する必要があるすべてのクラスによって実装される必要があります。 このインタフェースは、任意のオブジェクトを書式設定するための基本コントロールとして使用できます。 たとえば、次のクラスは、フラグと長さの制約に応じて、ストックの名前の異なる表現を出力します:
  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_JUSTIFYFormattableFlags.UPPERCASE、およびFormattableFlags.ALTERNATEを任意に組み合わせて設定できる。 フラグが設定されていない場合、実装するクラスのデフォルト書式が適用される。
      width - 出力に書き込まれる最小文字数。 変換された値の長さがwidthより小さい場合、合計文字数が幅になるまで、出力は'  'でパディングされます。 デフォルトでは、パディングは先頭に対して行われる。 FormattableFlags.LEFT_JUSTIFYフラグが設定された場合、パディングは終端に対して行われる。 width-1の場合、最小値はありません。
      precision - 出力に書き込まれる最大文字数。 精度は幅の前に適用されるため、widthprecisionより大きい場合でも、出力はprecision文字に切り捨てられます。 precision-1の場合、文字数に対する明示的な制限はありません。
      スロー:
      IllegalFormatException - いずれのパラメータも不正な場合。 考えられるすべての書式エラーの仕様については、フォーマッタ・クラス仕様の「詳細」セクションを参照。