如何计算 Java 中的“(1.25 > 8)?(2.3125 * sin(90) * 1.25) : (2.3125 * sin(90) * 8)”

How to evaluate "(1.25 > 8)? (2.3125 * sin(90) * 1.25) : (2.3125 * sin(90) * 8)" in Java

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

EL1011E:(pos 50): Method call: Attempted to call method sin(java.lang.Integer) on null context object error.

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

阅读 Spring 表达式语言 (SpEL) 手册。

选项 1:§9.5.12 Functions

You can extend SpEL by registering user defined functions that can be called within the expression string.

选项 2:§9.5.9 Types

The special T operator can be used to specify an instance of java.lang.Class (the type). Static methods are invoked using this operator as well.

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

如果您选择选项 2,那么表达式应该是这样的:

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