为什么我的属性对象在我执行get时会忽略默认值?

时间:2011-06-12 20:08:13

标签: java

Properties defaults = new Properties();
defaults.put("color", "black");

Properties props = new Properties(defaults);

// This prints "null, black"
System.out.println(props.get("color") + ", " + props.getProperty(color));

2 个答案:

答案 0 :(得分:5)

Java做出了Properties 子类 Hashtable的不幸决定,而不仅仅是包含一个Hashtable

getProperty方法使用默认支持Properties,但从get继承的Hashtable方法却没有。所以,如果你写:

System.out.println(props.getProperty("color"));

它会像你期望的那样打印出“黑色”。

答案 1 :(得分:0)

get public V get(Object key) 

从HashMap继承的方法。 返回指定键映射到的值,如果此映射不包含键的映射,则返回null。

使用构造函数new Property(默认)时,将内部字段 default 设置为默认属性。在 default 属性中使用getProperty Properties类查找时,如果Properties HashMap不包含值,则从中返回值。

public String getProperty(String key) {
   Object oval = super.get(key);
   String sval = (oval instanceof String) ? (String)oval : null;
return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
}