java.util.Formatter クラス
なんか、どこかで見たような名前のクラスだが、それはたぶんjava.text.Formatクラス。
このクラスを直接使用することは今のところはあまりない。でもよく使っている。
どこで使っているかというと、例えば次のようなクラスのメソッド。
また、java.util.Formatterクラスに関連する次のインタフェースもJava 2 SE 5.0から導入されている。
- java.lang.Appendable インタフェース
- java.io.Closeable インタフェース
- void close() メソッド
- java.io.Flushable インタフェース
- void flush() メソッド
誰か(誰)が、これらのインタフェースを(instanceofなどで)判定することはないだろう、と言っていて、自分もそう思っていた。確かに判定はしないだろうが、実はこれらは全てjava.util.Formatterクラスで使用されている。
java.lang.Appendableインタフェースは、Formatterクラスのフィールドの型になっている。コンストラクタにAppendableオブジェクトを渡すものはそのままだが、ほかにもファイル名やFileオブジェクトを渡すものはそのファイルに書き込むためのBufferedWriter、何も渡さないものはStringBuilderオブジェクトがそのフィールドに保持される。
java.io.Closeableインタフェースは、Formatterクラス自身もこのインタフェースを実装しているが、そのclose()メソッドの中で、保持しているAppendableオブジェクトがCloseableインタフェースを実装している場合はそいつのclose()メソッドを呼ぶという処理をしている。
java.io.Flushableインタフェースは、Closeableインタフェースと同様にFormatterクラス自身が実装しているが、そのflush()メソッドの中で、保持しているAppendableオブジェクトがFlushableインタフェースを実装している場合はそいつのflush()メソッドを呼ぶという処理をしている。
独自のクラス自身が、このFormatterオブジェクトによる整形処理を必要とする場合(あるのか?)にはAppendableインタフェースを実装することになるが、その際に、Closeableインタフェース、Flushableインタフェースの実装の必要性についても考慮することになるのだろう。