讨论: Sun JAVA API 奇怪的设计:Properties(Properties p)
在项目中碰到一个很奇怪的问题,找到原因后发现了是Properties(Properties p)在作怪:
想想下面的代码会输出什么:
Properties p = new Properties();
p.put("abc", "abc");
p.put("abcd", "abcd");
p.put("a", "abc");
p.put("b", "bc");
Properties test = new Properties(p);
Iterator i = test.keySet().iterator();
while (i.hasNext()) {
String key = (String) i.next();
System.out.println(key);
System.out.println("=");
System.out.println(test.getProperty(key));
}
System.out.println(test.getProperty("abc"));
有经验的java程序员,肯定想当然的认为是:
输出
abc=abc
abcd=abcd
a=abc
b=bc
abc
但是正真的输出是:
abc
很让人意外!!!
查看了Properties的源码发现, Properties(Properties p)构造函数是把传入的p的引用放到了它的 defauts域中,而这个defauts中的值通过keySet()方法是找不到的,
但通过getProperty()是找得到的。 真是奇怪的设计,大家有没有什么想法???