Получение HashMap из ((HashLiteral.SequenceHash) (args.get (1))). KeyMap - PullRequest
0 голосов
/ 04 марта 2012

В моем методе шаблона (реализованном с TemplateMethodModelEx) один из аргументов имеет тип HashLiteral.SequenceHash.Однако этот класс является частным, и я не могу получить карту непосредственно из него.Доступны только методы TemplateHashModelEx - keys() и values().

Я с трудом могу поверить, что единственный способ получить карту - это перебрать результат keys() и values(), чтобы восстановить его.Есть ли другой способ?

1 Ответ

1 голос
/ 05 марта 2012

Если вы можете, вы должны просто использовать интерфейс TemplateHashMapEx, потому что у хешей FTL не всегда есть Map -ы, а в их интерфейсе нет даже Map (как они могуттолько ключи String).Поэтому, даже если вы можете получить Map из HashLiteral.SequenceHash, что если вы получите какой-то другой тип хэша в качестве параметра?

Если вам действительно нужен java.util.Map интерфейс для этого хэша, вам лучше спроситьObjectWraper (Environment.getCurrentEvironment().getObjectWrapper()), чтобы предоставить один для вас.Если ваш ObjectWrapper расширяет BeansWrapper (и в 99,9% приложений он делает), вы можете позвонить на него BeansWrapper.unwrap(theHashParam, Map.class).

Как примечание, бедный BeansWrapper столкнется с той же ситуациейкак ты сделал;он не может получить доступ к Map позади.Однако он не будет создавать новый Map, просто поместите хэш в интерфейс Map.Будет ли это все еще неэффективно, это проблема разработчиков FreeMarker, и ее следует исправить там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...