public interface Formattable
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
。
void formatTo(Formatter formatter, int flags, int width, int precision)
formatter
格式化对象。
formatter
- formatter
。
实现类可以调用formatter.out()
或formatter.locale()
获得Appendable
或Locale
被此formatter分别。
flags
- 标志修改输出格式。
该值被解释为位掩码。
下列标志的任何组合可被设置: FormattableFlags.LEFT_JUSTIFY
, FormattableFlags.UPPERCASE
和FormattableFlags.ALTERNATE
。
如果没有设置任何标志,则实施类的默认格式将被应用。
width
- 要写入输出的最小字符数。
如果转换值的长度小于width,则输出将被填充' ' ,直到字符的总数等于宽度。
默认情况下,填充处于开头。
如果FormattableFlags.LEFT_JUSTIFY
标志被设置,则填充将在结束。
如果width是-1那么没有最小值。
precision
- 要写入输出的最大字符数。
精度在宽度之前应用,因此即使width大于precision,输出将被截断为precision个字符 。
如果precision是-1,那么字符数没有明确的限制。
IllegalFormatException
- 如果任何参数无效。
有关所有可能的格式化错误的规范 ,请参阅格式化程序类规范的Details部分。