【问题标题】:How do you reset an `ST` instance in `StringTemplate4`?如何在 `StringTemplate4` 中重置`ST` 实例?
【发布时间】:2016-01-26 19:16:59
【问题描述】:

版本 3 中的 StringTemplate 实例有一个 .reset() 方法。

我在 for/each 循环内生成,并希望在每个循环结束时将实例重置为其默认状态。 我搜索了 JavaDoc,但找不到如何重置 ST 的实例以重用它。

如何重置StringTemplate4 中的ST 实例?

【问题讨论】:

  • 此外,如果您需要,此信息非常有用。任何反对者可以解释一下吗?
  • @foo - 就像一年前一样,它是来自一些非常小的人的连续投票,就像一年前一样,忽略它,我知道我这样做。

标签: stringtemplate stringtemplate-4


【解决方案1】:

This is here because this was a hard thing to find!

.reset() 方法已被删除,并且没有直接文档提示如何在版本 4 中完成此操作。

通过深入研究源代码,我发现.getInstanceOf() 交付模板的缓存未初始化副本,无需 再调用实例上的.reset(),只需获取一个新的缓存 实例。

STGroup.java截至本回答时的相关代码:

/** The primary means of getting an instance of a template from this
 *  group. Names must be absolute, fully-qualified names like {@code /a/b}.
 */
public ST getInstanceOf(String name) {
    if ( name==null ) return null;
    if ( verbose ) System.out.println(getName()+".getInstanceOf("+name+")");
    if ( name.charAt(0)!='/' ) name = "/"+name;
    CompiledST c = lookupTemplate(name);
    if ( c!=null ) {
        return createStringTemplate(c);
    }
    return null;
}

/** Look up a fully-qualified name. */
public CompiledST lookupTemplate(String name) {
    if ( name.charAt(0)!='/' ) name = "/"+name;
    if ( verbose ) System.out.println(getName()+".lookupTemplate("+name+")");
    CompiledST code = rawGetTemplate(name);
    if ( code==NOT_FOUND_ST ) {
        if ( verbose ) System.out.println(name+" previously seen as not found");
        return null;
    }
    // try to load from disk and look up again
    if ( code==null ) code = load(name);
    if ( code==null ) code = lookupImportedTemplate(name);
    if ( code==null ) {
        if ( verbose ) System.out.println(name+" recorded not found");
        templates.put(name, NOT_FOUND_ST);
    }
    if ( verbose ) if ( code!=null ) System.out.println(getName()+".lookupTemplate("+name+") found");
    return code;
}

【讨论】:

  • 感谢 DenverCoder9 拯救了古人的智慧!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多