Java 在属性实例上调用getProperty将返回null而不是值
为什么下面的代码返回的是Java 在属性实例上调用getProperty将返回null而不是值,java,properties,getproperty,Java,Properties,Getproperty,为什么下面的代码返回的是null,而不是true 我可以看到该属性是根据{TEST=true}输出设置的 Java代码: import java.util.Properties; public class Test { public static void main(String[] args) { System.out.println("1"); Properties props = new Properties(); props.p
null
,而不是true
我可以看到该属性是根据{TEST=true}
输出设置的
Java代码:
import java.util.Properties;
public class Test {
public static void main(String[] args) {
System.out.println("1");
Properties props = new Properties();
props.put("TEST", true);
System.out.println(props);
System.out.println(props.getProperty("TEST"));
System.out.println("2");
}
}
程序输出:
1
{TEST=true}
null
2
您使用的
put
方法取自HashTable
,而Properties
类正在扩展该HashTable。
如果要使用put
,则要检索它,应使用get
:
props.get("TEST");
但是,如注释中所述,要设置属性,应使用setProperty()
方法:
props.setProperty("TEST", "true");
使用setProperty()
而不是put()
getProperty()
和setProperty()
对字符串进行操作。请参见以下JavaDoc:
如果查看Properties
类的源代码,应该会看到它对在getProperty()
中检索的属性值执行instanceof
检查。如果属性值不是字符串,则返回null
由于属性继承自哈希表,因此put和putAll方法
可以应用于属性对象。它们的用途非常广泛
不鼓励,因为它们允许调用者插入其键或
值不是字符串。应改用setProperty方法。
如果对“受损”属性调用存储或保存方法
对象,则调用将失败。
类似地,如果
它在包含
非字符串键
因此,对于字符串,使用setProperty()和getProperty()方法;对于对象,使用put()和get()方法。使用setProperty()而不是put()。getProperty()和setProperty()对字符串进行操作。请看这里的JavaDoc:虽然您所说的一切都是正确的,但人们不应该决定如何使用基于源代码的方法。方法实现是私有的,可以在不同的版本之间更改。稳定且永远不会改变的是方法的契约,也就是它的javadoc.Fair注释——我绝对不主张任何人查看源代码而不是公共API来做出决定。我引用源代码的唯一原因是因为JavaDoc对这种行为不是特别清楚——所以它只是回答了OP最初的“为什么会发生这种情况?”问题。