这是我用于生成 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;
我建议使用不同的变量名:)
关于java - StringTemplate 映射操作中的奇怪 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897399/