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最初的“为什么会发生这种情况?”问题。