|
JavaTM 2 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."
可格式化項對於多執行緒存取而言未必是安全的。執行緒安全是可選的,並且可以通過擴展和實作此介面的類別來強制執行。
除非另行指定,否則將 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
- 這些標誌將修改輸出格式。該值被解釋為位遮罩碼(bitmask)。可以將以下標誌的組合設置為:FormattableFlags.LEFT_JUSTIFY
、FormattableFlags.UPPERCASE
和 FormattableFlags.ALTERNATE
。如果沒有設置標誌,則應用實作類別的預設格式。width
- 寫入到輸出的最少字元數。如果轉換值的長度小於 width,那麼輸出將用 ' ' 來填充,直到總字元數等於 width。預設情況下,從開始處進行填充。如果設置了 FormattableFlags.LEFT_JUSTIFY
標誌,則從結尾處進行填充。如果 width 為 -1,則不存在最少字元數。precision
- 寫入到輸出的最多字元數。precision 應用在 width 之前,因此,即使 width 大於 precision,輸出也將被截斷為 precision 字元。如果 precision 為 -1,那麼對於字元的數量沒有明顯限制。
IllegalFormatException
- 如果所有參數都無效。有關所有可能的格式設置錯誤的規範,請參閱格式器類別規範的 Details 一節。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。