【问题标题】:Spring expression (SpEL) - Elvis operator : cannot convert from Integer to Boolean errorSpring 表达式 (SpEL) - Elvis 运算符:无法从整数转换为布尔错误
【发布时间】:2016-10-17 12:35:52
【问题描述】:

我正在使用 Spring 表达式版本 4.3.2.RELEASE 看来我们不能将 Elvis 运算符用于除 String 和 Boolean 之外的任何其他类型。

例如,以下将引发错误: 场 ?: 2 > 0

  • 如果字段 = 1,我们得到 java.lang.ClassCastException: java.lang.Integer 无法转换为 java.lang.Boolean

  • 如果字段为空: 然后 Elvis 正常工作并使用值 2。

我们可以解决这个问题吗?是 SpEL 的缺陷吗?

谢谢,

塞巴斯蒂安

【问题讨论】:

  • 你的字段类型是什么?整数?
  • 嗨,是的,在这种情况下它是一个整数。

标签: spring spring-el


【解决方案1】:

Elvis 运算符是三元运算符的简写符号,用于 nullability 检查。

它的语法是:

someField?:somevalue

其中,someField 可以是任何类型。上面的表达式将返回值someField (e.g. Integer),如果不是null,则返回someValue。 someValue 必须与someField (Integer) 的类型相同。

因此,这不是 SPel 的限制。这是运算符的具体用法。

在您的示例中,field 是一个整数,因此解析的值也必须是整数类型。但是,您正在执行解析为布尔类型的 2>0,这在这种情况下无效。

你可以做的是(field?: 2) > 0,如果这是你想要达到的目标。

我希望,它澄清了。

【讨论】:

  • @Sebastien 太好了。很高兴我能帮上忙。
  • @Sebastien 您可以将答案标记为已为他人完成。
  • 谢谢。这是写答案。
【解决方案2】:

这似乎是运算符优先级问题。也许你的表情应该是(field ?: 2)>0

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2012-08-15
    相关资源
    最近更新 更多