Java HashMap.get () возвращает значение null для действительного ключа

Статическая функция Constant.g() описана ниже:

public class Constant {

    private static Properties constantConfig;

    public static String g(String property) {
        try {
            if (constantConfig == null) {
                constantConfig = new Properties();
                constantConfig.load(new FileInputStream(System.getProperty("user.dir") + "/" +
                        "constants.properties"));
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return constantConfig.getProperty(property);
    }

}

У меня есть json, и я конвертирую его в карту, как показано ниже:

Map data = (new ObjectMapper()).readValue(json, HashMap.class);

Затем я наблюдаю следующее поведение:

Constant.g("user_id") // this returns String "userId" successfully

data.get("userId") // This also works fine and return value correctly

но код ниже возвращает null:

data.get(Constant.g("user_id"))

Это может быть проблема с equal() и HashCode(). Как я могу это решить?

String правильно реализует equals() и hashcode(), так что это не имеет к этому никакого отношения. То, что вы описываете, не может произойти с показанным кодом (последние 2 фрагмента).
Kayaman 17.04.2018 16:50

Тогда что еще это может быть?

Ali Raza 17.04.2018 16:51

"userId".equals(Constant.g("user_id")) возвращает true?

4castle 17.04.2018 16:52

Сначала проверьте это с помощью отладчика. Держу пари, что Constat.g ("user_id") не вернул в вашем случае "userId" или данные не содержат ключа "userId"

Vicctor 17.04.2018 16:52

..или есть пробелы или аналогичная незначительная проблема.

Kayaman 17.04.2018 16:52

@ 4castle "userId".equals(Constant.g("user_id")) возвращает false. Можете ли вы немного помочь?

Ali Raza 17.04.2018 17:00

@Vicctor, как я уже сказал, он возвращает Constat.g("user_id") правильно возвращает userId

Ali Raza 17.04.2018 17:01

@Kayaman Я тоже пробовал обрезать, и это не работает

Ali Raza 17.04.2018 17:02

Если он возвращает false, значит, он неправильно возвращает userId. Попробуйте вызвать .toCharArray() для строк и сравните их более внимательно. Наверное, есть какой-то непечатный персонаж.

4castle 17.04.2018 17:04

@ 4castle, что касается System.out.print (), он печатает нормально. Я попробую твой путь.

Ali Raza 17.04.2018 17:06

«Печатает нормально», но работает некорректно.

Kayaman 17.04.2018 17:09

@ 4castle Большое спасибо. Ваш toCharArray() помог в решении моей проблемы. Мой файл constants.properties - отстой. Еще раз, спасибо. Пожалуйста, дайте мне знать, могу ли я дать вам хоть какой-то балл?

Ali Raza 17.04.2018 17:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
12
200
0

Другие вопросы по теме