EL Collection#contains 不工作
EL Collection#contains not working
我正在 Spring、JSP、Tomcat 环境中使用 servlet 版本 3.0。我正在尝试使用 Collection#contains
方法(据我所知已添加到 servlet 3.0)。它似乎不起作用,在调试过程中,我想出了以下奇怪的案例,似乎可以查明问题所在:
${priority[0] == 1}
${priority[0] eq 1}
${priority.contains(priority[0])}
${priority.contains(1)}
这打印出来
true true true false
此外,priority
是一个包含整数 1,2,3
的 List<Integer>
。
所以,问题是,how/why 最后一张支票是否打印 false
?
编辑以回应评论:是的,当从 Intellij 调试器中调用时,列表包含 1
。
我写了一个小class:
public static class Test {
public String contains(Object value) {
return value.getClass().toString();
}
}
将其添加为名为 test
的 JSP 属性,然后:
${test.contains(1)}
生成:
class java.lang.Long
Long
不是 Integer
,因此在 List<Integer>
中找不到。
更新
以下是 运行 在 Tomcat 8 上的,在旧版本上不会按原样工作,但可以说明非浮点文字是 Long
,不是 Integer
(浮点文字是 Double
),但是 ==
仍然进行数值比较,所以 Long value == Integer value 有效正确。
${test.contains(1)}
${test.contains(Long.valueOf('1'))}
${test.contains(Integer.valueOf('1'))}
${Long.valueOf('1') == Integer.valueOf('1')}
生成:
class java.lang.Long
class java.lang.Long
class java.lang.Integer
true
我正在 Spring、JSP、Tomcat 环境中使用 servlet 版本 3.0。我正在尝试使用 Collection#contains
方法(据我所知已添加到 servlet 3.0)。它似乎不起作用,在调试过程中,我想出了以下奇怪的案例,似乎可以查明问题所在:
${priority[0] == 1}
${priority[0] eq 1}
${priority.contains(priority[0])}
${priority.contains(1)}
这打印出来
true true true false
此外,priority
是一个包含整数 1,2,3
的 List<Integer>
。
所以,问题是,how/why 最后一张支票是否打印 false
?
编辑以回应评论:是的,当从 Intellij 调试器中调用时,列表包含 1
。
我写了一个小class:
public static class Test {
public String contains(Object value) {
return value.getClass().toString();
}
}
将其添加为名为 test
的 JSP 属性,然后:
${test.contains(1)}
生成:
class java.lang.Long
Long
不是 Integer
,因此在 List<Integer>
中找不到。
更新
以下是 运行 在 Tomcat 8 上的,在旧版本上不会按原样工作,但可以说明非浮点文字是 Long
,不是 Integer
(浮点文字是 Double
),但是 ==
仍然进行数值比较,所以 Long value == Integer value 有效正确。
${test.contains(1)}
${test.contains(Long.valueOf('1'))}
${test.contains(Integer.valueOf('1'))}
${Long.valueOf('1') == Integer.valueOf('1')}
生成:
class java.lang.Long
class java.lang.Long
class java.lang.Integer
true