2017-01-27 6 views
1

これは、偽テンプレート{i | import <i>;<\n>}のマップ操作をimportsのすべての値に対して実行するimportステートメントを生成するためのStringTemplateテンプレートです。StringTemplateのマップ操作で奇妙なNullPointerExceptionが発生しました

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

これはjava.lang.NullPointerException at org.stringtemplate.v4.misc.ErrorManager.runTimeError(ErrorManager.java:133)をスローします。

iを別のものに変更すると、これは完璧に機能し、両方のケースで入力に差異がないと確信しています。これはエラーをスローしないように、

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

iの予約やStringTemplateで何かまたは私は何かが足りないのですか?

答えて

1

<i>は、配列の1ベースのインデックスにアクセスするために使用されます。

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

プリントのテンプレートと

例えば、

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

import 14; 
import 25; 

私は別の変数名を使用してお勧めしたい:)

More info herehere

+0

はい私は完全にそれを当然のことで見落としました! – scarecrow

関連する問題