2017-01-27 5 views
1

Ceci est mon modèle StringTemplate pour générer des instructions import, qui effectue une opération de mappage sur le modèle anonyme {i | import <i>;<\n>} pour chaque valeur dans imports.Bizarre NullPointerException dans l'opération de mappe StringTemplate

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

Ce java.lang.NullPointerException at org.stringtemplate.v4.misc.ErrorManager.runTimeError(ErrorManager.java:133) lancers francs.

Et la partie étrange est, quand je change i à quelque chose d'autre, cela fonctionne parfaitement et je suis sûr qu'il n'y a pas de différence dans l'entrée dans les deux cas. Comme cela ne jette pas l'erreur,

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

est-i réservé ou quelque chose dans StringTemplate ou suis-je manque quelque chose?

Répondre

1

<i> est utilisé pour accéder à l'index basé sur 1 dans le tableau.

Par exemple,

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

avec un modèle de

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

Prints:

import 14; 
import 25; 

Je vous suggère d'utiliser un autre nom de la variable :)

More info here et here

+0

Oui, j'ai totalement oublié en le prenant pour acquis! – scarecrow