我的.stg文件中有兩個模板,並且它們都適用於 多值HashMap。 HashMap被用作注入對象。Stringtemplate:應用HashMap使用的模板是否可行,對於多值屬性
我需要的HashMap的那些實例可以被注射多次。
我的麻煩是,當我切換到另一個模板時,ANTLR好像將 考慮爲第二個HashMap作爲List - multipul對象並且爲null 值。我.G文件
Part of my .stg file shows as follows:
tpl_hash(BAR, FOO) ::= <<
<FOO:foo(); separator="\n">
<BAR:bar(); separator="\n">
>>
foo(nn) ::= <<
foo: <nn.name; null="NULL"> . <nn.national; null="NULL">
>>
bar(mm) ::= <<
bar: <mm.name> @ <mm.national>
>>
部分顯示:
HashMap hm = new HashMap();
hm.put("name", $name.text);
hm.put("national", "German");
tpl_hash.add("FOO",new HashMap(hm));
HashMap hm2 = new HashMap();
hm2.put("name", $name.text);
hm2.put("national", "German");
tpl_hash.add("BAR",new HashMap(hm2));
我希望得到的結果是:
bar: Kant @ German
foo: Russell @ England
但是,我得到:
foo: NULL . NULL
foo: NULL . NULL
bar: @
bar: @
如果我們FOO更換BAR,按原樣保持FOO和BAR具有相同 模板,輸出是正確的,像下面這樣。
bar: Russell @ German
bar: Russell @ German
在文檔, 「同步ST中 添加(字符串名稱,對象的值)org.stringtemplate.v4.ST」 說:
「如果你在一個列表發送,然後注入單個值元素add() 複製原始列表並添加新值。「
約一個HashMap什麼? StringTemplate是否考慮將HashMap,鍵/值對 作爲一個對象故意作爲List和多值注入的 錯誤?
您標記並提到了ANTLR,但我沒有看到有關ANTLR的問題(僅StringTemplate)。我爲此刪除了ANTLR標籤,並用「StringTemplate」替換了「ANTLR」。如果我錯了,你可以回到原來的問題,但請編輯問題以明確ANTLR問題。 –