【问题标题】:Getting HashMap from ((HashLiteral.SequenceHash) (args.get(1))).keyMap从 ((HashLiteral.SequenceHash) (args.get(1))).keyMap 获取 HashMap
【发布时间】:2012-03-22 10:21:06
【问题描述】:

在我的模板方法(使用 TemplateMethodModelEx 实现)中,参数之一是 HashLiteral.SequenceHash 类型。但是,这个类是私有的,我无法直接从中获取地图。唯一可访问的方法是 TemplateHashModelEx - keys()values()

我几乎不敢相信获取地图的唯一方法是遍历 keys()values() 的结果以重建它。还有其他方法吗?

【问题讨论】:

    标签: java freemarker


    【解决方案1】:

    如果可以,您应该只使用TemplateHashMapEx 接口,因为 FTL 哈希并不总是在后面有Map-s,而且它们的接口中甚至没有Map-s(就像他们可以只有String 键)。所以即使你可以从HashLiteral.SequenceHash 中得到Map,如果你得到一些其他类型的哈希作为参数呢?

    如果您确实需要该哈希的java.util.Map 接口,您最好让ObjectWraper (Environment.getCurrentEvironment().getObjectWrapper()) 为您提供一个。如果您的 ObjectWrapper 扩展了 BeansWrapper(在 99.9% 的应用程序中),您可以在其上调用 BeansWrapper.unwrap(theHashParam, Map.class)

    顺便说一句,可怜的BeansWrapper 将面临与您相同的情况;它无法访问后面的Map。但是,它不会构建新的Map,只是将散列包装到Map 接口中。会不会还是效率低下,这是 FreeMarker 维护者的问题,应该在那里解决。

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2011-03-26
      • 2014-01-04
      相关资源
      最近更新 更多