0

因此,我根本无法收集对常量静态数组中值的访问。

让它成为我的代码中的一个数组:

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。关于如何击败这个的任何想法,或者目前在技术上是不可能的?

4

1 回答 1

0

例外

java.lang.ClassCastException: [我无法转换为 [Ljava.lang.Object;

表示该数组MY_ARRAY是一个int类型数组,并且int是一个原始类型,因此它不是 的子类型Object,因此您不能将其强制转换为Object类型数组

在这种情况下,您可以将MY_ARRAY的签名更改为public static Integer[] MY_ARRAY

Integer将值包装int在一个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
}
于 2017-08-27T14:44:04.910 回答