java - StringTemplate 映射操作中的奇怪 NullPointerException

标签 java stringtemplate stringtemplate-4

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

关于java - StringTemplate 映射操作中的奇怪 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897399/

相关文章:

java - 线程对象在哪里创建?堆栈还是堆?

java - 以相同的方式解析文件和命令行选项

templates - 在哪里可以下载使用 stringtemplate 的完整示例 java 项目?

Python String template dict KeyError,如何设置默认值

antlr - 将 Antlr 3.5.2 与 StringTemplate 4 结合起来进行代码生成

java - 如何通过其他浏览器将文本写入Gmail邮件正文

java - && 和 || while循环中的问题

java - 如何从 Web 存档的 WEB-INF 目录加载 StringTemplateGroups

java - Stringtemplate-4:使用 '@' 作为自定义分隔符

antlr4 - 运行 JSON2XML_ST 时出错