这是我用于生成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中的东西还是我遗漏了什么?
答案 0 :(得分:2)
<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;
我建议使用不同的变量名称:)
答案 1 :(得分:2)
i,i0