如何在Java中评估“(1.25> 8)?(2.3125 * sin(90)* 1.25):( 2.3125 * sin(90)* 8)”

时间:2016-06-07 04:28:58

标签: java spring spring-el

我正在使用org.springframework.expression.spel.standard.SpelExpressionParser来解析String表达式,但是当我向此表达式添加sin(90)时,我收到以下错误:

  

EL1011E:(pos 50):方法调用:尝试在空上下文对象错误上调用方法sin(java.lang.Integer)。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

阅读Spring Expression Language(SpEL)手册。

选项1:§9.5.12 Functions

  

您可以通过注册可在表达式字符串中调用的用户定义函数来扩展SpEL。

选项2:§9.5.9 Types

  

特殊T运算符可用于指定java.lang.Class的实例( type )。也可以使用此运算符调用静态方法。

如果选择选项1,则可以注册sin()函数,表达式将保持不变。

如果你选择选项2,那么这就是表达式的外观:

(1.25 > 8) ? (2.3125 * T(Math).sin(90) * 1.25) : (2.3125 * T(Math).sin(90) * 8)