在 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() 方法。
为什么下面的代码返回 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() 方法。