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
-
メソッドのサマリー
-
メソッドの詳細
-
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
より小さい場合、合計文字数が幅になるまで、出力は' '
でパディングされます。 デフォルトでは、パディングは先頭に対して行われる。FormattableFlags.LEFT_JUSTIFY
フラグが設定された場合、パディングは終端に対して行われる。width
が-1
の場合、最小値はありません。precision
- 出力に書き込まれる最大文字数。 精度は幅の前に適用されるため、width
がprecision
より大きい場合でも、出力はprecision
文字に切り捨てられます。precision
が-1
の場合、文字数に対する明示的な制限はありません。- 例外:
IllegalFormatException
- いずれのパラメータも不正な場合。 考えられるすべての書式エラーの仕様については、フォーマッタ・クラス仕様の「詳細」セクションを参照。
-