2017-08-27 6 views
0

静的な静的配列の値にはアクセスできません。Jtwigテンプレートから静的定数配列にアクセスする

これは私のコードで配列になりましょう:

public static int[] MY_ARRAY; 

そして、これは私がその配列にアクセスしようとする方法である:

{{ constant("com.package.configs.MainConfig.MY_ARRAY")[0] }} 

この試みはエラーにつながる:

java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object; 
    at org.jtwig.value.convert.collection.ArrayToCollectionConverter.convert(ArrayToCollectionConverter.java:11) 
    at org.jtwig.value.convert.CompositeConverter.convert(CompositeConverter.java:15) 
    at org.jtwig.render.expression.calculator.MapSelectionExpressionCalculator.calculate(MapSelectionExpressionCalculator.java:19) 
    at org.jtwig.render.expression.calculator.MapSelectionExpressionCalculator.calculate(MapSelectionExpressionCalculator.java:12) 
    at org.jtwig.render.expression.CalculateExpressionService.calculate(CalculateExpressionService.java:14) 
... 

変数に最初に定数を代入してアクセスしようとしましたが、何も変わりませんでした。

以前のバージョンのJTwigでは、モデルに渡されたオブジェクトの公開静的フィールドにアクセスできました。しかし、今ではこのようなフィールドは無視されています。

私が使用しているバージョンは5.86.0です。 これを克服する方法や、現時点では技術的に不可能なことはありますか?

答えて

0

例外

java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;

は、配列MY_ARRAYint型配列であることを意味し、そしてintはこのようにそれはそうあなたがObjectにキャストすることはできません、Objectのサブタイプではありません、primitiveです - タイプアレイを入力します。

この場合、MY_ARRAYの署名をpublic static Integer[] MY_ARRAYに変更することができます。

Integerは、Objectintの値をラップします。これは、次の例で示されて

public static void main(String args[]) { 
    int[] arr = new int[5]; 
    Integer[] arrI = new Integer[5]; 
    test(arr); // error:The method test(Object[]) in the type Demo is not applicable for the arguments (int[]) 
    test(arrI); // ok 
} 
+0

はい、ヒントのおかげで、これは意図したとおりに動作します。しかし、もし私が作業しようとしているコードを変更することができないのですか? インスタンス用です。私はNashornから任意の配列(オブジェクトまたはプリミティブ)にアクセスできます。 – VirtualVoid

+0

私はNashornを知らないのですが、異なる型引数を持つ複数のオーバーロードメソッドがあると思います。異なる型引数を使用して呼び出す場合は、実際は別のメソッドを呼び出しています。 – Leeqihe

関連する問題