Я писал код, где я пытался наложить объект на карту.Принудительное принуждение Список к карте не бросает ClassCastException или что такое ArrayList1_groovyProxy?
Map a = object as Map
Я мог бы в качестве альтернативы использовать
Map a = (Map) object
и весь вопрос был бы неуместным, поскольку это бросает ClassCastException
если объект находится в списке типов, но с помощью бывшего я обнаружил интересную вещь. Если объект представляет собой Список, то есть object = []
, принудительное принуждение типа будет отличаться от ожидаемого.
Мое предположение было получить ClassCastException
, но вместо этого я получил результирующий объект. Но этот объект кажется странным. Это экземпляр списка и экземпляр карты, и с использованием .toString()
на нем выводится вывод списка, а не карты ([a,b]
). Также невозможно установить значение на карте с помощью a['c'] = 'c'
. Это приводит к java.lang.IllegalArgumentException: argument type mismatch
.
Map a = ['a', 'b'] as Map
println(a)
println(a instanceof List)
println(a instanceof Map)
println(a.getClass())
приводит следующий вывод:
[a, b]
true
true
class ArrayList1_groovyProxy
Я пытался Google, чтобы узнать, что это ArrayList1_groovyProxy
есть, но не смог найти ничего.
Мне до сих пор не имеет смысла, что принуждение возвращает объект, который, очевидно, не является тем, чем он должен быть, и также выглядит как сломанный, а не просто бросает ClassCastException
.
Может ли кто-нибудь объяснить мне причину такого поведения вместо того, чтобы выбрасывать исключение и объяснять использование ArrayList1_groovyProxy
? Или это просто ошибка в groovy?
'['a', 'b']' является 'List'. Если вам нужна карта, то определите 'def map = ['1': 'one', '2': 'two']'. Теперь попробуйте 'assert map instanceof Map' – Rao
Я знаю, что' ['a', 'b'] '- это List. Дело не в этом. Вопросы были связаны с тем, что '['a', 'b'] как Map' не генерирует ClassCastException, например' (Map) ['a', 'b'] '. Потому что кажется, что результирующий объект довольно непригоден. – alexanderfranke
Не уверен, но вы заставляете его указывать «как карту» при определении. Вы можете увидеть исключение с помощью 'Map a = ['a', 'b']' – Rao