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