【问题标题】:Accessing static constant arrays from Jtwig template从 Jtwig 模板访问静态常量数组
【发布时间】:2017-08-27 11:43:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: java arrays static classcastexception jtwig


    【解决方案1】:

    异常

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

    表示数组MY_ARRAY 是一个int 类型的数组,而int 是一个primitive,因此它不是Object 的子类型,所以你不能将它转换为Object-type 数组.

    在这种情况下,您可以将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
    }
    

    【讨论】:

    • 是的,感谢您的提示,这个按预期工作。但是,如果我无法更改我正在尝试使用的代码怎么办?仅举一个例子。我可以从 Nashorn 访问任何数组(对象或原语)。
    • 我不知道 Nashorn,但我认为它有两个或多个不同类型参数的重载方法,所以当你使用不同类型参数调用时,实际上是在调用不同的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2018-02-24
    • 2010-09-13
    • 2013-07-11
    • 2013-01-31
    • 1970-01-01
    相关资源
    最近更新 更多