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[]はまだ書いてないからスルーしてますね。
さて、出来たのはいいんですが、
この分岐、プリミティブの数だけ追加するのもかっこ悪いですね。
うーん、ちょっと探してみたけど、なさそう。
やっぱだらだら書かなきゃだめかなぁ。