Spring 表达式 (SpEL) - Elvis 运算符:无法从整数转换为布尔错误
Spring expression (SpEL) - Elvis operator : cannot convert from Integer to Boolean error
我正在使用 Spring 表达式版本 4.3。2.RELEASE
似乎我们不能将 Elvis 运算符用于除 String 和 Boolean 之外的任何其他类型。
例如,下面会抛出一个错误:
字段 ?: 2 > 0
如果字段 = 1 我们得到
java.lang.ClassCastException: java.lang.Integer 无法转换为 java.lang.Boolean
如果字段为空:
然后 Elvis 工作正常并使用值 2.
我们可以解决这个问题吗?是 SpEL 的缺陷吗?
谢谢,
塞巴斯蒂安
Elvis 运算符是shorthand 三元运算符的表示法,用于可空性 检查。
它的语法是:
someField?:somevalue
其中,someField 可以是任何类型。上面的表达式将 return someField (e.g. Integer)
的值,如果它不是 null
,否则它将 return someValue
。 someValue 必须与 someField (Integer)
.
类型相同
因此,这不是 SPel 的限制。就是operator的具体用法。
在您的示例中,field
是一个整数,因此解析值也必须是整数类型。但是,您所做的 2>0
解析为布尔类型,这在这种情况下无效。
你能做的就是(field?: 2) > 0
,如果这是你想要实现的。
我希望,它澄清了。
这似乎是运算符优先级问题。也许你的表情应该是(field ?: 2)>0
希望对您有所帮助。
我正在使用 Spring 表达式版本 4.3。2.RELEASE 似乎我们不能将 Elvis 运算符用于除 String 和 Boolean 之外的任何其他类型。
例如,下面会抛出一个错误: 字段 ?: 2 > 0
如果字段 = 1 我们得到 java.lang.ClassCastException: java.lang.Integer 无法转换为 java.lang.Boolean
如果字段为空: 然后 Elvis 工作正常并使用值 2.
我们可以解决这个问题吗?是 SpEL 的缺陷吗?
谢谢,
塞巴斯蒂安
Elvis 运算符是shorthand 三元运算符的表示法,用于可空性 检查。
它的语法是:
someField?:somevalue
其中,someField 可以是任何类型。上面的表达式将 return someField (e.g. Integer)
的值,如果它不是 null
,否则它将 return someValue
。 someValue 必须与 someField (Integer)
.
因此,这不是 SPel 的限制。就是operator的具体用法。
在您的示例中,field
是一个整数,因此解析值也必须是整数类型。但是,您所做的 2>0
解析为布尔类型,这在这种情况下无效。
你能做的就是(field?: 2) > 0
,如果这是你想要实现的。
我希望,它澄清了。
这似乎是运算符优先级问题。也许你的表情应该是(field ?: 2)>0
希望对您有所帮助。