0

为什么下面的代码返回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
4

3 回答 3

1

使用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该类的源代码,您应该会看到它instanceof检查了它在 中检索的属性的值getProperty()。如果属性值不是字符串,则返回null.

于 2020-02-27T12:55:39.277 回答
0

您使用的put方法取自HashTable哪个Properties类正在扩展。如果你想使用putthen 来检索它,你应该使用get

props.get("TEST");

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

props.setProperty("TEST", "true");
于 2020-02-27T12:55:13.200 回答
0

因为 Properties 继承自 Hashtable,所以 put 和 putAll 方法可以应用于 Properties 对象。强烈建议不要使用它们,因为它们允许调用者插入键或值不是字符串的条目。应该改用 setProperty 方法。如果在包含非字符串键或值的“受损”属性对象上调用存储或保存方法,则调用将失败。类似地,如果在包含非字符串键的“受损”属性对象上调用 propertyNames 或 list 方法,则调用将失败。

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

于 2020-02-27T13:02:32.373 回答