贊助商連結

Java 小技巧

用反射拿到基本型別(Primitive Type)

Java Reflection 可以動態的產生類別,但是如果要產生基本型別的話用這樣子的話

1
Class.forName("int.class");

是沒有用的,因為基本型別是在 Integer內的一個欄位,要用反射拿到基本型別的話,就只好建立一個 Map 在根據傳入的 String 取得基本型別。

1
2
3
4
5
6
7
8
9
10
11
private static Map nameToPrimitiveClass = new HashMap();
static {
nameToPrimitiveClass.put("boolean",Boolean.TYPE);
nameToPrimitiveClass.put("byte",Byte.TYPE);
nameToPrimitiveClass.put("char",Character.TYPE);
nameToPrimitiveClass.put("short",Short.TYPE);
nameToPrimitiveClass.put("int",Integer.TYPE);
nameToPrimitiveClass.put("long",Long.TYPE);
nameToPrimitiveClass.put("float",Float.TYPE);
nameToPrimitiveClass.put("double",Double.TYPE);
}

其實這一招在很多 Framework 都有用到,像是 JBossSpring,有興趣可以挖 Code 下來看。

將偵測文字並轉型為基本型別

從 XML 讀入參數,因為讀進來的都是文字,如果要偵測參數並轉型為基本型別的話,可以用 Apache Commons Lang 的 NumberUtils 來處理。

1
2
3
4
Number n1 = NumberUtils.createNumber("100L");
Number n2 = NumberUtils.createNumber("100.0f");
Number n3 = NumberUtils.createNumber("100.0D");
Number n4 = NumberUtils.createNumber("100.0");

可以在文字後面加上「f, F, d, D, l, L」 來讓 NumberUtils 轉成 Float、Double、Long,當然也可以都不加,讓 NumberUtils 來猜。