这是我的用于生成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 herehere

10-06 14:00