StringTemplate 映射操作中的奇怪 NullPointerException
Weird NullPointerException in StringTemplate map operation
这是我用于生成 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 and here
是的,我是 reserved.List 个保留关键字:
i, i0
在应用于一个或多个属性的模板中引用时,迭代次数分别从 1 和 0 开始索引。
- 默认
- 第一
- 组
- 如果
- 实施
- 界面
- 最后
- 长度
- 可选
- 休息
- 剥离
- 超级
- 截断
- 其他
- 结束
- 其他
这是我用于生成 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 and here
是的,我是 reserved.List 个保留关键字:
i, i0
在应用于一个或多个属性的模板中引用时,迭代次数分别从 1 和 0 开始索引。
- 默认
- 第一
- 组
- 如果
- 实施
- 界面
- 最后
- 长度
- 可选
- 休息
- 剥离
- 超级
- 截断
- 其他
- 结束
- 其他