Почему вызовы функции 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 String
s.
Быстрая проверка типа переменной подтвердила проблему с типом, а затем нужно было просто вернуться к поиску источника интерполированной строки.