眾所周知,java中Properties類繼承于Hashtable,但是它的目的是只存儲string,如果用法不當可能會造成無法取出數據。
例子:
1?Properties?prop=new?Properties();
2?prop.put("id","12");
3?prop.put("price",new?BigDecimal(4));
4?System.out.println("prop="+prop.toString());
5?String?price=prop.getProperty("price");
6?System.out.println("price="+price);
7?
打印的結果可能象下面所示
第4行的結果:prop={id=12,price=4}
第6行的結果:price=null
為什么取出來的price為null,而不是我們傳入的值4??
1.首先讓我們看下jdk中getProperty的源碼
1
?public?String?getProperty(String?key)?
{
2
????Object?oval?=?super.get(key);
3
????String?sval?=?(oval?instanceof?String)???(String)oval?:?null;
4
????return?((sval?==?null)?&&?(defaults?!=?null))???defaults.getProperty(key)?:?sval;
5
????} 從第3行可以看出,如果Properties中的value不是String的實例就會返回null。
2。在例子中,我們用put方法傳入了BigDecimal的實例,因此取出的時候返回了null。
為了避免這種情況的出現,我們用Properties時應該使用setProperty和getProperty方法,但這樣會限制傳入的只能是String的實例。