眾所周知,java中Properties類繼承于Hashtable,但是它的目的是只存儲(chǔ)string,如果用法不當(dāng)可能會(huì)造成無法取出數(shù)據(jù)。
例子:
打印的結(jié)果可能象下面所示
第4行的結(jié)果:prop={id=12,price=4}
第6行的結(jié)果:price=null
為什么取出來的price為null,而不是我們傳入的值4??
1.首先讓我們看下jdk中g(shù)etProperty的源碼
從第3行可以看出,如果Properties中的value不是String的實(shí)例就會(huì)返回null。
2。在例子中,我們用put方法傳入了BigDecimal的實(shí)例,因此取出的時(shí)候返回了null。
為了避免這種情況的出現(xiàn),我們用Properties時(shí)應(yīng)該使用setProperty和getProperty方法,但這樣會(huì)限制傳入的只能是String的實(shí)例。
例子:
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?
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?
打印的結(jié)果可能象下面所示
第4行的結(jié)果:prop={id=12,price=4}
第6行的結(jié)果:price=null
為什么取出來的price為null,而不是我們傳入的值4??
1.首先讓我們看下jdk中g(shù)etProperty的源碼
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
????}



2

3

4

5

從第3行可以看出,如果Properties中的value不是String的實(shí)例就會(huì)返回null。
2。在例子中,我們用put方法傳入了BigDecimal的實(shí)例,因此取出的時(shí)候返回了null。
為了避免這種情況的出現(xiàn),我們用Properties時(shí)應(yīng)該使用setProperty和getProperty方法,但這樣會(huì)限制傳入的只能是String的實(shí)例。