这是我的用于生成import
语句的StringTemplate模板,该模板针对{i | import <i>;<\n>}
中的每个值对匿名模板imports
进行映射操作。importdecl(imports) ::= "<if(imports)> <imports: {i | import <i>;<\n>}> <endif>"
这将引发java.lang.NullPointerException at org.stringtemplate.v4.misc.ErrorManager.runTimeError(ErrorManager.java:133)
。
奇怪的是,当我将i
更改为其他内容时,这可以正常工作,并且我确信两种情况下的输入都没有区别。这样不会引发错误,importdecl(imports) ::= "<if(imports)> <imports: {r | import <r>;<\n>}> <endif>"
是i
保留还是StringTemplate中的某些内容,或者我缺少某些内容?
最佳答案
<i>
用于访问数组中基于1的索引。
例如,
ST st = stGroup.getInstanceOf("importdecl");
int[] data = {4, 5};
st.add("imports", data);
System.out.println(st.render());
与的模板
importdecl(imports) ::= <<
<if(imports)><imports: {k | import <i><k>;<\n>}><endif>
>>
印刷品:
import 14;
import 25;
我建议使用其他变量名称:)
More info here和here