gpt4 book ai didi

java - 如何在 FreeMarker (FTL) 中从自己的类创建实例

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:50 27 4
gpt4 key购买 nike

我希望实例化一个在我的域中定义的 java 类,并且我想以这种方式从我的 FTL 代码中使用它,但我收到了错误。

<#assign myClassInstance = "com.domain.MyClass"?new())>

这可能吗?我应该改变什么才能做到这一点?

MyClass 未实现 TemplateModel

谢谢!

最佳答案

没有用于实例化任意非 TemplateModel 的内置函数类...也许应该有一个设置来允许 ?new 。不管怎样,现在你可以写一个 TemplateMethodModelEx这样做,然后您可以将其拉入一些常用包含/导入的模板中,例如 <#assign unrestrictedNew = "com.example.UnrestrictedNewMethodModel"?new()> (或者只是将实例放入数据模型或 Configuration 作为共享变量),然后您可以执行 <#assign myClassInstance = unrestrictedNew("com.domain.MyClass")(arg1, arg2, argN)>在你的模板中。实现这样的 TemplateMethodModel 有两个棘手的部分。一种是将类名解析为 Class ,我推荐 env.getNewBuiltinClassResolver().resolve(className, env, null) ,其中env当前是freemarker.core.Environment目的。另一种是调用构造函数,因为那时您必须转换参数值并可能选择重载的构造函数。为此,我建议调用 ow = env.getObjectWrapper() ,看看是否 ow instanceof BeansWrapper (如果不是则抛出异常),然后执行 return ((BeansWrapper) ow).newInstance(cl, arguments) .

关于java - 如何在 FreeMarker (FTL) 中从自己的类创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22893419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com