Вызов getProperty для экземпляра Properties возвращает значение NULL вместо значения - PullRequest
0 голосов
/ 27 февраля 2020

Почему код ниже возвращает 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

Ответы [ 3 ]

1 голос
/ 27 февраля 2020

Используйте setProperty() вместо put(). getProperty() и setProperty() работают со строками. См. JavaDo c, здесь: https://docs.oracle.com/javase/9/docs/api/java/util/Properties.html#setProperty - java .lang.String- java .lang.String-

Если вы посмотрите на исходный код для Properties class, вы должны увидеть, что он выполняет instanceof проверку значения свойства, которое он получает в getProperty(). Если значение свойства не является строкой, возвращается null.

0 голосов
/ 27 февраля 2020

Поскольку Properties наследуется от Hashtable, методы put и putAll могут быть применены к объекту Properties. Их использование настоятельно не рекомендуется, поскольку они позволяют вызывающей стороне вставлять записи, ключи или значения которых не являются строками. Вместо этого следует использовать метод setProperty. Если метод store или save вызывается для «скомпрометированного» объекта Properties, содержащего не строковый ключ или значение, вызов завершится неудачно. Аналогично, вызов метода propertyNames или list завершится ошибкой, если он вызывается для «скомпрометированного» объекта Properties, содержащего не строковый ключ.

Так что для String используйте setProperty () и getProperty ( ) и для объекта используйте методы put () и get ().

0 голосов
/ 27 февраля 2020

Используемый вами метод put взят из HashTable, класс которого Properties расширяется. Если вы хотите использовать put, то для его извлечения вам следует использовать get:

props.get("TEST");

Однако, как указано в комментариях, для установки свойств следует использовать метод setProperty() вместо:

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