讨论: Sun JAVA API 奇怪的设计:Properties(Properties p)

haiquan81 2008-09-05 02:23:30
在项目中碰到一个很奇怪的问题,找到原因后发现了是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()是找得到的。 真是奇怪的设计,大家有没有什么想法???

...全文
48 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
haiquan81 2008-09-10
  • 打赏
  • 举报
回复
就像你说的,Properties虽然是个Map ,但主要功能不是用来遍历整个属性值的,一般用来getProperty 方法比较多。
  • 打赏
  • 举报
回复
Properties 虽然是个 Map 基本上不会去遍历整个属性值的,一般用 getProperty 方法比较多,呵呵。
  • 打赏
  • 举报
回复
就是提供一个默认的值呗

比如某个 Properties 配置文件,得配置 10 个参数,但是使用者只配置了 7 个参数,
还有 3 个参数没有配置,如果没有默认值的读取这三个参数就会出现空指针,如果有默
认的话,就不会产生这种情况,因为没有配置的话就使用默认的值。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧