如何在`StringTemplate4`中重置`ST`实例?

时间:2016-01-26 19:16:59

标签: stringtemplate stringtemplate-4

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

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

如何重置ST中的StringTemplate4实例?

1 个答案:

答案 0 :(得分:6)

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;
}