版本3中的StringTemplate实例具有.reset()
方法。
我在for/each
循环内部生成,并希望在每个循环结束时将实例重置为其默认状态。
我搜索了JavaDoc,但无法找到如何重置ST
的实例以重用它。
ST
中的StringTemplate4
实例?答案 0 :(得分:6)
.reset()
方法已被删除,并且没有直接文档提示如何在第4版中完成此操作。通过挖掘源代码,我发现
.getInstanceOf()
提供模板的缓存未初始化副本没有必要 再次调用实例上的.reset()
,只需获得一个新的缓存 实例
/** 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;
}