2017-08-27 61 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