2013年7月25日木曜日

[Java]数値のラッパー型をintに変換する

引数で何らかの数値ラッパー型がObjectで引き渡される。それをintとして利用したい的なことありませんか? ありませんね。
でも、汎用的な変換ライブラリなどではそんなことあるかもしれませんね。 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 件のコメント: