public interface 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 がスローされます。
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 の前に適用されるため、width の値が precision より大きい場合でも、出力は precision で指定された文字数に切り詰められる。precision が -1 の場合、文字数に明示的な制限は存在しない。IllegalFormatException - いずれのパラメータも不正な場合。考えられるすべての書式エラーの仕様については、フォーマッタクラス仕様の「詳細」セクションを参照。 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.