Java 从((HashLiteral.SequenceHash)(args.get(1)).keyMap获取HashMap

Java 从((HashLiteral.SequenceHash)(args.get(1)).keyMap获取HashMap,java,freemarker,Java,Freemarker,在我的模板方法(使用TemplateMethodModelEx实现)中,其中一个参数的类型为HashLiteral.SequenceHash。但是,这个类是私有的,我无法直接从中获取地图。只有TemplateHashModelEx-keys()和values()的方法可以访问 我很难相信获得映射的唯一方法是迭代keys()和values()的结果来重建它。还有其他方法吗?如果可以的话,您应该使用TemplateHashMapEx接口,因为FTL哈希并不总是有映射-s在后面,它们甚至不在接口中(就

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


我很难相信获得映射的唯一方法是迭代
keys()
values()
的结果来重建它。还有其他方法吗?

如果可以的话,您应该使用
TemplateHashMapEx
接口,因为FTL哈希并不总是有
映射
-s在后面,它们甚至不在接口中(就像它们只能有
字符串
键一样)。因此,即使您可以从
HashLiteral.SequenceHash
中获得
Map
,但如果您获得其他类型的散列作为参数,会怎么样

如果您确实需要
java.util.Map
接口到该散列,那么最好让
ObjectWrapper
Environment.getCurrentEnvironment().getObjectWrapper()
)为您提供一个接口。如果您的
ObjectWrapper
扩展了
BeansWrapper
(在99.9%的应用程序中是这样),您可以在其上调用
BeansWrapper.unwrap(hashparam,Map.class)

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