でも、汎用的な変換ライブラリなどではそんなことあるかもしれませんね。 instanceofを全部の数値ラッパー型に適応して。。。涙が出そうになります。ということで調べてみるとNumberというインタフェースがあり、これが使えることがわかりました。 IntegerやDoubleのリファレンスを見るとわかるとおり、ラッパー型のクラスはみんなNumberを継承しているんです。 コードはこんな感じ。
public static void main(String[] args) {
Object d = Double.valueOf(3.5d);
System.out.println("3.5d=" + toInt(d));
Object f = Float.valueOf(2.5f);
System.out.println("2.5f=" + toInt(f));
Object l = Long.valueOf(20l);
System.out.println("20l=" + toInt(l));
Object b = Byte.valueOf((byte) 20);
System.out.println("20b=" + toInt(b));
Object s = Short.valueOf((short) 20);
System.out.println("20s=" + toInt(s));
Object bd = new BigDecimal(4.5);
System.out.println("4.5bd=" + toInt(bd));
Object al = new AtomicLong(21);
System.out.println("21al=" + toInt(al));
}
/**
* int変換.
*
* 数値ラッパーをintに変換する。
*
* @param obj
* @return 変換した数値
*/
public static int toInt(Object obj) {
if (!(obj instanceof Number)) {
throw new IllegalArgumentException("not number!!");
}
return ((Number) obj).intValue();
}
実行結果はこんな感じ。
3.5d=3
2.5f=2
20l=20
20b=20
20s=20
4.5bd=4
21al=21
0 件のコメント:
コメントを投稿