在我的模板方法中(使用TemplateMethodModelEx实现),其中一个参数的类型为HashLiteral.SequenceHash。但是,这个类是私有的,我无法直接从它获取地图。只有可访问的方法是TemplateHashModelEx - keys()
和values()
。
我很难相信获取地图的唯一方法是迭代keys()
和values()
的结果来重建它。还有其他方法吗?
答案 0 :(得分:1)
如果可以的话,你应该只使用TemplateHashMapEx
界面,因为FTL哈希值并不总是Map
- s,它们甚至不是Map
- s in他们的界面(就像他们只能有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维护者的问题,应该在那里修复。