2017-01-27 4 views
1

Dies ist meine StringTemplate-Vorlage zum Generieren von import-Anweisungen, die die Operation für die anonyme Vorlage {i | import <i>;<\n>} für jeden Wert in imports abbildet.Weird NullPointerException in StringTemplate-Kartenoperation

importdecl(imports) ::= "<if(imports)> <imports: {i | import <i>;<\n>}> <endif>"

Dies wirft java.lang.NullPointerException at org.stringtemplate.v4.misc.ErrorManager.runTimeError(ErrorManager.java:133).

Und der komische Teil ist, wenn ich i zu etwas anderem ändern, funktioniert das perfekt und ich bin sicher, dass es keinen Unterschied in der Eingabe in beiden Fällen gibt. Wie dieses nicht Fehler werfen,

importdecl(imports) ::= "<if(imports)> <imports: {r | import <r>;<\n>}> <endif>"

Ist i reserviert oder etwas in String oder bin ich etwas fehlt?

Antwort

1

<i> wird verwendet, um den 1 basierten Index in dem Array zuzugreifen.

Zum Beispiel

ST st = stGroup.getInstanceOf("importdecl"); 
int[] data = {4, 5}; 
st.add("imports", data); 
System.out.println(st.render()); 

mit einer Vorlage von

importdecl(imports) ::= << 
    <if(imports)><imports: {k | import <i><k>;<\n>}><endif> 
>> 

Drucken:

import 14; 
import 25; 

Ich würde vorschlagen, einen anderen Variablennamen :)

More info here und here

+0

Ja ich, indem sie es für selbstverständlich völlig übersehen! – scarecrow