在 Properties 实例上调用 getProperty 返回 null 而不是值

Calling getProperty on a Properties instance is returning null instead of value

为什么下面的代码返回 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 class 的扩展。 如果你想使用 put 然后检索它你应该使用 get :

props.get("TEST");

但是正如评论中提到的,对于设置属性,您应该使用 setProperty() 方法来代替:

props.setProperty("TEST", "true");

使用 setProperty() 而不是 put()getProperty()setProperty() 对字符串进行操作。在此处查看 JavaDoc:https://docs.oracle.com/javase/9/docs/api/java/util/Properties.html#setProperty-java.lang.String-java.lang.String-

如果您查看 Properties class 的源代码,您应该会看到它会对 属性 的值进行 instanceof 检查在 getProperty() 中检索。如果 属性 值不是字符串,则它 returns null.

Because Properties inherits from Hashtable, the put and putAll methods can be applied to a Properties object. Their use is strongly discouraged as they allow the caller to insert entries whose keys or values are not Strings. The setProperty method should be used instead. If the store or save method is called on a "compromised" Properties object that contains a non-String key or value, the call will fail. Similarly, the call to the propertyNames or list method will fail if it is called on a "compromised" Properties object that contains a non-String key.

因此,对于 String 使用 setProperty() 和 getProperty() 方法,对于 Object 使用 put() 和 get() 方法。