public interface Formattable
java.util.Formattable |
Formattable接口必须由任何需要使用Formatter转换说明符Formatter
执行自定义格式化的类来实现。 该界面允许对任意对象进行格式化的基本控制。 例如,以下类根据标志和长度限制打印出股票名称的不同表示形式:
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."
对于多线程访问,Formattables不一定是安全的。 线程安全是可选的,可以通过扩展和实现这个接口的类来强制执行。
除非另有说明,否则将 null参数传递给此接口中的任何方法将导致引发 NullPointerException
。
Public methods |
|
---|---|
abstract void |
formatTo(Formatter formatter, int flags, int width, int precision) 使用提供的 |
void formatTo (Formatter formatter, int flags, int width, int precision)
使用提供的 formatter
格式化对象。
Parameters | |
---|---|
formatter |
Formatter : The formatter . Implementing classes may call formatter.out() or formatter.locale() to obtain the Appendable or Locale used by this formatter respectively. |
flags |
int : The flags modify the output format. The value is interpreted as a bitmask. Any combination of the following flags may be set: LEFT_JUSTIFY , UPPERCASE , and ALTERNATE . If no flags are set, the default formatting of the implementing class will apply. |
width |
int : The minimum number of characters to be written to the output. If the length of the converted value is less than the width then the output will be padded by ' ' until the total number of characters equals width. The padding is at the beginning by default. If the LEFT_JUSTIFY flag is set then the padding will be at the end. If width is -1 then there is no minimum. |
precision |
int : The maximum number of characters to be written to the output. The precision is applied before the width, thus the output will be truncated to precision characters even if the width is greater than the precision. If precision is -1 then there is no explicit limit on the number of characters. |
Throws | |
---|---|
IllegalFormatException |
If any of the parameters are invalid. For specification of all possible formatting errors, see the Details section of the formatter class specification. |