gpt4 book ai didi

java - 自由标记 : nested templates

转载 作者:行者123 更新时间:2023-12-01 14:32:19 24 4
gpt4 key购买 nike

我是 freemarker 的初学者,我想用它来生成一些重复的代码。

从像这样的简单类:

public class Point {
private Integer x;
private Integer y;
private String name;
}

我需要为每个属性生成如下行:

ValueProvider<Point,Integer> x();
ValueProvider<Point,Integer> y();
ValueProvider<Point,String> name();

为了实现这一点,我有这个简单的模板:

ValueProvider<${clazz},${attrType}> ${attrName}();

然后,我想生成一个完整的类,如下所示:

public final class PointValueProviders {

public interface PointPropertyAccess extends PropertyAccess<Point>{
ValueProvider<Point,Integer> x();
ValueProvider<Point,Integer> y();
ValueProvider<Point,String> name();
}

public static final PointPropertyAccess POINT_PA= GWT.create(PointPropertyAccess.class);

private PointValueProviders(){}

};

为此,我有一个问题:我不知道如何在像这样的较大模板中应用小模板不确定的次数:

public final ${clazz}ValueProviders {

public interface ${clazz}PropertyAccess extends PropertyAccess<${clazz}>{

//Here, How do I tell freemarker to use the small template???

//ValueProvider<${clazz},${attrType}> ${attrName}();
//ValueProvider<${clazz},${attrType}> ${attrName}();
//ValueProvider<${clazz},${attrType}> ${attrName}();
//ValueProvider<${clazz},${attrType}> ${attrName}();
//etc..

}

public static final ${clazz}PropertyAccess ${clazzUpperCase}_PA= GWT.create(${clazz}PropertyAccess.class);

private ${clazz}ValueProviders(){}

};

有什么想法吗?

最佳答案

模板用于显示您提供给他们的一些数据。所以重要的问题是,模板如何知道要输出什么 class/attrType/attrName 三元组?您应该提供这些列表,我们将其称为 props,然后使用

循环遍历它
<#list props as prop>
ValueProvider<${prop.clazz},${prop.attrType}> ${prop.attrName}();
</#list>

否则,要创建小型可重用模板,请使用#macro(这个更灵活)或#include。在 FreeMarker Manual 中查看它们.

关于java - 自由标记 : nested templates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16768436/

24 4 0