|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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
がスローされます。
メソッドの概要 | |
---|---|
void |
formatTo(Formatter formatter,
int flags,
int width,
int precision)
指定された フォーマッタ を使用してオブジェクトの書式を設定します。 |
メソッドの詳細 |
---|
void formatTo(Formatter formatter, int flags, int width, int precision)
フォーマッタ
を使用してオブジェクトの書式を設定します。
formatter
- フォーマッタ
。クラスの実装により formatter.out()
または formatter.locale()
が呼び出され、この formatter で使用される Appendable
または Locale
がそれぞれ取得されるflags
- フラグにより出力書式が変更される。値はビットマスクとして解釈される。フラグ FormattableFlags.LEFT_JUSTIFY
、FormattableFlags.UPPERCASE
、および FormattableFlags.ALTERNATE
を任意に組み合わせて設定できる。フラグが設定されていない場合、実装するクラスのデフォルト書式が適用されるwidth
- 出力に書き込まれる最小文字数。変換後の値の長さが width より小さい場合、総文字数が width に等しくなるまで出力に ' ' がパディングされる。デフォルトでは、パディングは先頭に対して行われる。FormattalbeFlags#LEFT_JUSTIFY
フラグが設定された場合、パディングは終端に対して行われる。width が -1 の場合、最小値は存在しないprecision
- 出力に書き込まれる最大文字数。precision は width の前に適用されるため、width の値が precision より大きい場合でも、出力は precision で指定された文字数に切り詰められる。precision が -1 の場合、文字数に明示的な制限は存在しない
IllegalFormatException
- いずれのパラメータも不正な場合。考えられるすべての書式エラーの仕様については、フォーマッタクラス仕様の「詳細」セクションを参照
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。