Spring EL - 调用静态接口方法

时间:2018-04-24 09:45:28

标签: spring-el

有没有办法在SpEL中调用静态接口方法? 例如:

T(java.util.stream.IntStream).of(new Integer[]{1,2,3}).sum()

当我运行此操作时,我收到此错误:Problem locating method of on type class java.lang.Class

2 个答案:

答案 0 :(得分:3)

您缺少向我们展示更多堆栈跟踪:

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1033E: Method call of 'of' is ambiguous, supported type conversions allow multiple variants to match
at org.springframework.expression.spel.support.ReflectiveMethodResolver.resolve(ReflectiveMethodResolver.java:211)

它无法在运行时通过反射解析正确的方法,因为of()中有多个IntStream方法。

这对我有用:

ExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("T(java.util.stream.IntStream).of(1,2,3).sum()");

assertThat(expression.getValue()).isEqualTo(6);

答案 1 :(得分:1)

需要"T(java.util.stream.IntStream).of(new int[]{1,2,3}).sum()"

int[]不是Integer[])。

问题是有两种of()方法需要从Integer[]转换,所以你得到了

  

引起:org.springframework.expression.spel.SpelEvaluationException:EL1033E:'of'的方法调用不明确,支持的类型转换允许多个变体匹配