Почему вызовы функции hasKey() не выполняются для этой отличной карты?

Я предполагаю, что что-то напортачил с этими объявлениями, но у меня есть классный класс с полем, определенным так:

Map<String, SomeType> _someField = [:]

Я делаю вставки, как это:

_someField.put( someStringVariable, someTypeInstance )

... а затем, когда я проверяю, присутствует ли ключ, который, как я знаю, был сопоставлен, проверка завершается неудачно:

_someField.containsKey( someStringVariable )

Единственный способ добиться успеха - позвонить toString(), вот так:

_someField.containsKey( someStringVariable.toString() )

Я использую общее объявление карты, поэтому моя среда IDE дает мне автоматическое завершение для типов значений, поэтому я бы очень хотел (я думаю) сохранить там информацию о типах.

Я пытался изменить тип ключа с String в GString, но безрезультатно. Я попытался изменить инициализацию карты из заводной стенографии [:] в new LinkedHashMap<>Тоже безрезультатно.

Любые идеи, могу ли я сохранить информацию о типе и избежать необходимости использовать toString()?

1 ответ

Так что это был случай, когда переменная подается на containsKey() в тех случаях, когда он терпит неудачу, были типа org.codehaus.groovy.runtime.GStringImpl потому что они были сгенерированы функцией, которая выполняла раскрытие переменных на значениях карты, и эта функция создавала шпунтовые интерполированные строки для значений вместо Java Strings.

Быстрая проверка типа переменной подтвердила проблему с типом, а затем нужно было просто вернуться к поиску источника интерполированной строки.

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