我正在使用Spring表达式版本4.3.2.RELEASE 似乎我们不能将Elvis运算符用于除String和Boolean之外的任何其他类型。
例如,以下内容将抛出错误: 字段?:2> 0
如果field = 1,我们得到 java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Boolean
如果字段为空: 然后Elvis正常工作并使用值2.
我们可以解决这个问题吗?它是SpEL的缺陷吗?
感谢,
的Sebastien
答案 0 :(得分:1)
Elvis运算符是三元运算符的简写符号,用于可空性检查。
它的语法是:
someField?:somevalue
其中,someField可以是任何类型。上面的表达式将返回someField (e.g. Integer)
的值,如果它不是null
,则它将返回someValue
。 someValue必须与someField (Integer)
类型相同。
所以,这不是SPel的限制。这是运营商的具体用法。
在您的示例中,field
是一个整数,因此,已解析的值也必须是整数类型。但是,你正在做2>0
解析为布尔类型,在这种情况下无效。
你可以做的是(field?: 2) > 0
,如果这是你想要达到的目标。
我希望,它澄清了。
答案 1 :(得分:0)
这似乎是运营商优先问题。也许你的表达应该是(field ?: 2)>0
希望它有所帮助。