模块  java.base
软件包  java.util

Interface Formattable


  • public interface Formattable
    Formattable接口必须由需要使用's'转换说明符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

    从以下版本开始:
    1.5
    • 方法详细信息

      • formatTo

        void formatTo​(Formatter formatter,
                      int flags,
                      int width,
                      int precision)
        使用提供的formatter格式化对象。
        参数
        formatter - 第formatter 实现类可以调用formatter.out()formatter.locale()获得AppendableLocale被此formatter分别。
        flags - 标志修改输出格式。 该值被解释为位掩码。 下列标志的任何组合可被设置: FormattableFlags.LEFT_JUSTIFYFormattableFlags.UPPERCASE ,和FormattableFlags.ALTERNATE 如果未设置任何标志,则将应用实现类的默认格式。
        width - 要写入输出的最小字符数。 如果转换值的长度小于width则输出将由'  '填充,直到总字符数等于宽度。 默认情况下,填充处于开头。 如果设置了FormattableFlags.LEFT_JUSTIFY标志,那么填充将在结尾处。 如果width-1那么没有最低要求。
        precision - 要写入输出的最大字符数。 精度宽度之前施加,因此输出将被截断为precision字符即使width比更大precision 如果precision-1则字符数没有明确限制。
        异常
        IllegalFormatException - 如果任何参数无效。 有关所有可能的格式错误的说明,请参阅formatter类规范的Details部分。