2017-08-27 60 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型數組,intprimitive,因而它不是Object子類型,所以你無法將其轉換爲Object - 型陣列

在這種情況下,您可以將MY_ARRAY的簽名更改爲public static Integer[] MY_ARRAY

Integerint值包含在Object中。

這是通過下面的例子說明:

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