悪あがきプログラマー

悪あがきを続けていきたい技術と書評なブログです。トレタでiOSエンジニアやってます。

toString()をリフレクションで書きたい。その3

昨日はint配列を

Object[] objects = (Object[]) field.get(this);

で、キャスト失敗したところで終わりました。


さて、キャストに失敗するならその前でクラスを調べればいいのでは?
ということでチャレンジ!

private String toStringArray(Field field) throws galArgumentException,
		IllegalAccessException {
	StringBuilder sb = new StringBuilder();
	sb.append("[");
	if (field.get(this) instanceof Object[]) { // Type is Object[]
		Object[] objects = (Object[]) field.get(this);
		for (Object object : objects) {
			sb.append(object + ", ");
		}
	} else if (field.get(this) instanceof int[]) { // Type is int[]
		int[] is = (int[]) field.get(this);
		for (int i : is) {
			sb.append(i + ", ");
		}
	}
	sb.append("]");
	return sb.toString();
}

実行結果

key=aaa, name=bbb, sex=ccc, age=ddd, favorite=[xxx, yyy, zzz, ], intTest=[1, 2, 3, ], booleanTest=[], 

おおっ!
出ましたね。


boolean[]はまだ書いてないからスルーしてますね。
さて、出来たのはいいんですが、
この分岐、プリミティブの数だけ追加するのもかっこ悪いですね。


うーん、ちょっと探してみたけど、なさそう。
やっぱだらだら書かなきゃだめかなぁ。