1

我编写了一个带有以下签名的 el 函数,它比较了双精度值:

java.lang.Number numberMinimum(java.lang.Number, java.lang.Number)

这甚至可以使用原始数据类型,
但是使用资源包中的值调用它会导致:

java.lang.IllegalArgumentException: Cannot convert 99 of type class java.lang.String to class java.lang.Number
at com.sun.el.lang.ELSupport.coerceToType(ELSupport.java:412)
at com.sun.el.parser.AstFunction.getValue(AstFunction.java:123)

而将参数更改为分配资源值的原始 int 有效?

int intMinimum(int, int)

如果所需的目标是 int 类型但不适用于数字,为什么表达式语言会将其自动转换为 int?

4

3 回答 3

0

添加另一个功能:

java.lang.Number numberMinimum(java.lang.String, java.lang.String)

在该函数中,将您的字符串转换为数字(将字符串转换为 Double - Java)并调用您的java.lang.Number numberMinimum(java.lang.Number, java.lang.Number)

于 2013-02-01T17:56:45.173 回答
0

字符串不会自动转换为数字。考虑通过重载numberMinimum()方法将字符串转换为 Number。

希望这可以帮助!

于 2013-02-01T18:10:07.353 回答
0

El 不能直接转换为 Number 只能继承类:

com.sun.el.lang.ELSupport.coerceToType(ELSupport.java:412) 检查目标类型是否是实现 Number 但不是 Number 本身的任何类型。

如果目标类型是 Number 类型,则没有像使用 double 一样的默认实现。

http://grepcode.com/file/repo1.maven.org/maven2/org.mortbay.jetty/jsp-2.1/6.1.1rc1/com/sun/el/lang/ELArithmetic.java#ELArithmetic.isNumberType%28java。 lang.Class%29

于 2013-02-01T18:28:36.790 回答