JavaTM Platform
Standard Ed. 6

java.util
インタフェース 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)
          指定されたフォーマッタを使用してオブジェクトの書式を設定します。
 

メソッドの詳細

formatTo

void formatTo(Formatter formatter,
              int flags,
              int width,
              int precision)
指定されたフォーマッタを使用してオブジェクトの書式を設定します。

パラメータ:
formatter - フォーマッタ。クラスの実装により formatter.out() または formatter.locale() が呼び出され、この formatter で使用される Appendable または Locale がそれぞれ取得される
flags - フラグにより出力書式が変更される。値はビットマスクとして解釈される。 フラグ FormattableFlags.LEFT_JUSTIFYFormattableFlags.UPPERCASE、および FormattableFlags.ALTERNATE を任意に組み合わせて設定できる。フラグが設定されていない場合、実装するクラスのデフォルト書式が適用される
width - 出力に書き込まれる最小文字数。変換後の値の長さが width より小さい場合、総文字数が width に等しくなるまで出力に '  ' がパディングされる。デフォルトでは、パディングは先頭に対して行われる。FormattalbeFlags#LEFT_JUSTIFY フラグが設定された場合、パディングは終端に対して行われる。 width-1 の場合、最小値は存在しない
precision - 出力に書き込まれる最大文字数。precision は width の前に適用されるため、width の値が precision より大きい場合でも、出力は precision で指定された文字数に切り詰められる。precision-1 の場合、文字数に明示的な制限は存在しない
例外:
IllegalFormatException - いずれのパラメータも不正な場合。可能性のある書式エラーすべての詳細は、formatter クラス仕様の「詳細」セクションを参照

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。