
commons-langでtoStringメソッドを簡単に実装する
山崎良
2008-08-08 18:13:01
第9回はtoStringメソッドを簡単に実装するためのクラス、ToStringBuilderを扱う。
ToStringBuilder
ToStringBuilderは、toStringメソッドの実装を簡単にするメソッドである。まずは解説のために書いたコードと、その実行結果を見てみよう。
public class ToStringBuilderTest { private String testStr; private boolean testBoolean; private int testInt; private String[] testArray; public String toString() { return new ToStringBuilder(this) .append("testStr",testStr) .append("testBoolean",testBoolean) .append("testInt",testInt) .append("testArray",testArray) .toString(); } public static void main(String[] args) { // インスタンスを生成してtoStringメソッドの結果を出力する ToStringBuilderTest test = new ToStringBuilderTest(); System.out.println(test);//……(1) // フィールド値をセットして再度出力する test.setTestStr("ABC"); test.setTestBoolean(true); test.setTestInt(1); test.setTestArray(new String[]{"aaa","bbb"}); System.out.println(test);//……(2) } // 以下アクセサ(getter/setter)は省略
ポイントは以下の4点である。
- このクラスは「String」「boolean」「int」「String[]」型の4つのフィールドを持つ
- toStringメソッドはこの4つのフィールドの値を全て含む文字列を生成して返す
- toStringメソッドの実装に「ToStringBuilder」クラスを使用している
- toStringメソッドの実行結果を確認するためにmainメソッドを記述した
mainメソッドを実行した結果は以下のようになる。
ToStringBuilderTest@166aa18[strTest=,blnTest=false,intTest=0,strArrayTest= ] ToStringBuilderTest@166aa18[strTest=ABC,blnTest=true,intTest=1,strArrayTest={aaa,bbb}]
1行目はToStringBuilderTestクラスのインスタンスを生成してそのまま出力した結果(1)で、2行目は各フィールドに値をセットしてから出力した結果(2)である。
もう一度、toStringメソッドの内容を見てみよう。
public String toString() { return new ToStringBuilder(this) .append("testStr",testStr) .append("testBoolean",testBoolean) .append("testInt",testInt) .append("testArray",testArray) .toString(); }
ToStringBuilderを使用して文字列を生成するのは、StringBufferクラスやStringBuilderクラスを使用して文字列を生成する場合と比べ、
- 簡単にフィールド名を指定できる。
- nullの処理
- 配列の処理
などの点で手間が軽減される。
同じ実行結果を得るために、ToStringBuilderを使用せずにtoStringメソッドを記述してみたところ、以下のようになった(厳密には全く同じ動作ではないかもしれない。コード量の参考程度に見ていただきたい)。
ToStringBuilderクラスを使った場合と比べて、かなりの手間がかかることがわかるだろう。
public String toString() { StringBuilder sb = new StringBuilder() .append(this.getClass().getName()) .append("@") .append(Integer.toHexString(System.identityHashCode(this))) .append("["); sb.append("testStr="); if(testStr!=null){ sb.append(testStr); }else{ sb.append(""); } sb.append(",testBoolean=").append(testBoolean); sb.append(",testInt=").append(testInt); sb.append(",testArray="); if(testArray!=null){ sb.append("{"); for(int i=0;i "); } sb.append("]"); return sb.toString(); }
ToStringBuilderクラスを使うことで、toStringメソッドの実装の手間が大幅に削減され、コードも見やすいものになる。積極的に使っていきたいクラスの1つだ。
folllow builer on
twitter
- 新着記事
- 特集
- ブログ
- 企画特集
-
ゼロトラストに不可欠なID管理
-
内部不正や不注意をどう防ぐ?
-
話題のセキュリティ事故体験ゲーム
-
さあ、クラウドで解決しよう。
-
デジタルを当たり前と言えるか?
-
いままさに社会にとっての転換点
-
明日からではもう遅い?!
-
連載!プロが語るストレージ戦略
-
ビッグデータ最前線!
-
IDaaSって何?
-
特集:IT最適化への道
-
請求書がきてからでは遅い
-
モバイルデバイスもターゲットに!
-
次の一手はこれだ!
-
データの散在と非常率運用がネック
-
連載!プロが語るストレージ戦略
-
保育業界のDX(後編)
-
いまあるデータで身近な業務をDX
-
保育業界のDX(前編)
-
講演の見どころを紹介
-
セキュリティの今を知る
-
いまさら聞けない「PPAP」
-
利便性とセキュリティの両立
-
連載!プロが語るストレージ戦略
-
企業DXのキモはクラウドにあり